NARUMASA CREATIVE DESIGN
Copyright © narumasa.com
All rights reserved.

【WordPress】WordPressのfunctions.phpでよく使う項目。

XHTML・HTML5・CSS2・CSS3・Javascript・jQuery・PHPなど。
Webクリエイター?フロントエンドエンジニア?では、覚えることがいっぱいあります。

正直なところ、全てを覚えておくことはなかなか難しいものがありますので、WordPressの【functions.php】でよく使う項目を記載しておきます。

古い情報もあるかもしれませんが、大体使えると思います。

/*** ヘッダータグの消去編 ***/

//外部のjQueryライブラリなどをつかえるようにする
remove_action('wp_head', 'wp_enqueue_scripts', 1);

//headタグに自動で『rel="next"、rel="prev"削除』を入れるのを削除
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

//RSSフィードなどを削除?
remove_action('wp_head', 'feed_links_extra',3,0);

//外部アプリケーションから情報を取得するためのプロトコル「RSD(Really Simple Discovery)」のリンクを削除
remove_action('wp_head', 'rsd_link');

//Windows Live Writer を使ってブログ投稿させない
remove_action('wp_head', 'wlwmanifest_link');

//WPのバージョンを削除
remove_action('wp_head', 'wp_generator');

//linkタグを出力。出力されたリンク先が、現在の文書に対する「索引(インデックス)」
remove_action('wp_head', 'index_rel_link');

//ブラウザが先読みするためlink rel="next"などのタグ
remove_action('wp_head', 'parent_post_rel_link');

//ブラウザが先読みするためlink rel="next"などのタグ
remove_action('wp_head', 'start_post_rel_link');

//URL正規化タグ。複数の類似した内容のページの中で優先されるページを指定
remove_action('wp_head', 'rel_canonical');

/*** サイト直下のショートコード:[urllink] ***/

リンクの部分に[]も付けて、[urllink]とそのまま記事に書き込めば使えます。

function links() {
return site_url('/');
}
add_shortcode('urllink', 'links');

/*** 画像のショートコード:[images link] ***/

こうしておけばテンプレートディレクトリからたどることもありません。

function images() {
return bloginfo('template_directory') . "/images/";  場合によって変更
}
add_shortcode('imageslink', 'images');

/*** アイキャッチ関連 ***/

例えば【520px × 220px】にしたい場合

//アイキャッチを使えるようにする宣言
add_theme_support('post-thumbnails');

// アイキャッチ画像の表示の仕方を指定(切り抜き)
set_post_thumbnail_size(520, 220, true );

/*** 『and more』の変更 ***/

//『and more』の変更
function new_excerpt_more($more) {
return ' .....';    //←この部分を変更
}
add_filter('excerpt_more', 'new_excerpt_more');

//『and more(抜粋)』の長さ変更
function new_excerpt_length($length) {
return 20;	//←この場合は20文字まで
}
add_filter('excerpt_length', 'new_excerpt_length');

/*** 編集画面のstylesheetを変更 ***/

クライアントにもわかりやすくなります。

add_editor_style('custom-editor-style.css');
//編集画面用のスタイルシートのリンク先

/*** カテゴリのリンクをスラッグでひろう ***/

function get_category_link_by_slug( $slug ){
$category = get_category_by_slug($slug);
echo get_category_link( $category -> term_id );
}

書き方はこんな感じ

echo get_category_link_by_slug('cliant_works');

/*** 検索ウィジェット関連 ***/

//検索ウィジェットの編集
function new_search_form($form) {
$form = '<form method="get" id="searchform" action="' . get_option('home') . '/" >
<div>
<input type="text" value="' . attribute_escape(apply_filters('the_search_query', get_search_query())) . '" name="s" id="s" />
<input type="submit" id="searchsubmit" value="search" />
</div>
</form>';
return $form;
}
add_filter('get_search_form', 'new_search_form' );

//検索ウィジェットの編集(postからのみ検索したい場合)
function SearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');

/*** 管理画面のナビゲーション・メニューを追加 ***/

register_nav_menu( 'gnav', 'gnav' );

/*** 編集画面の自動保存を削除 ***/

編集中にカシャカシャ勝手に保存されたくない場合はこれ。

function disable_autosave() {
wp_deregister_script('autosave');
}
add_action('wp_print_scripts','disable_autosave');

/*** 編集画面のリビジョン(前の編集に戻る)を削除

データベースの圧縮にもつながります。

define('WP_POST_REVISIONS', 10);

/*** 子カテゴリのテンプレートを全て親カテゴリのテンプレートに合わせる ***/

function my_category_template( $template ) {
$category = get_queried_object();
if ( $category->parent != 0 &&
( $template == "" || strpos( $template, "category.php" ) !== false ) ) {
$templates = array();
while ( $category->parent ) {
$category = get_category( $category->parent );
if ( !isset( $category->slug ) ) break;
$templates[] = "category-{$category->slug}.php";
$templates[] = "category-{$category->term_id}.php";
}
$templates[] = "category.php";
$template = locate_template( $templates );
}
return $template;
}
add_filter( 'category_template', 'my_category_template' );

/*** ログインユーザーが管理画面に行けないようにする ***/

function mts_check_login() {
global $current_user;

get_currentuserinfo();
extract($current_user->wp_capabilities);
if ($subscriber) {
wp_redirect(get_bloginfo('url'));
}
}
add_action('admin_init', 'mts_check_login');

/*** ページナビゲーション(plugin : wp-pagenavi)で表示数などを設定した際のエラー対処方法 ***/

例:カテゴリ(voice)の表示数設定
// フック時に使う関数
function voice_modify_main_query( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;

if ( $query->is_category( 'voice' ) ) { // カテゴリーアーカイブ
$query->set( 'posts_per_page', 5 ); // 10件ずつ表示
return;
}
}
add_action( 'pre_get_posts', 'voice_modify_main_query' ); // pre_get_postsにフック

/*** bodyタグのclassにページ名を追加する方法 ***/

カテゴリーごと・ページごとにスタイルシートを分ける際に便利です。

function pagename_class($classes = '') {
if (is_page()) {
$page = get_page(get_the_ID());
$classes[] = 'page-' . $page->post_name;
}
return $classes;
}
add_filter('body_class','pagename_class');

/*** 「single.php(詳細ページ)」のbodyタグのclassにカテゴリースラッグを追加する方法 ***/

function singlepage_categoryclass($classes = '') {
if (is_single()) {
$cat = get_the_category();
$cat = $cat[0];
$classes[] = 'category-' . $cat->slug;
}
return $classes;
}
add_filter('body_class','singlepage_categoryclass');

/*** 自動的に<p><br>が入るのを削除 ***/

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

/*** ユーザー権限による管理画面のメニュー ***/

// メニューを非表示にする
function remove_menus () {
if (!current_user_can('level_10')) { //level10以下のユーザーの場合メニューをunsetする
remove_menu_page('wpcf7'); //Contact Form 7
global $menu;
//unset($menu[2]); // ダッシュボード
//unset($menu[4]); // メニューの線1
//unset($menu[5]); // 投稿
//unset($menu[10]); // メディア
unset($menu[15]); // リンク
//unset($menu[20]); // ページ
unset($menu[25]); // コメント
//unset($menu[59]); // メニューの線2
unset($menu[60]); // テーマ
unset($menu[65]); // プラグイン
unset($menu[70]); // プロフィール
unset($menu[75]); // ツール
unset($menu[80]); // 設定
unset($menu[90]); // メニューの線3
}
}
add_action('admin_menu', 'remove_menus');

/*** バージョン管理を非表示 ***/

// バージョン更新を非表示にする
add_filter('pre_site_transient_update_core', '__return_zero');
// APIによるバージョンチェックの通信をさせない
remove_action('wp_version_check', 'wp_version_check');
remove_action('admin_init', '_maybe_update_core');

全てを必ず使うわけではありませんが、ヘッダータグのあたりは大体設定していると思います。
ただ、あまりいろいろと設定しすぎて、かえって使いづらくなったり、やりたいことができなくなる場合があるので、最初の設定の際に気をつけて設定して下さい。

意外と最後の自動的にタグが入ってしまう部分についてなど、コーディングを知っているからこそ勝手に入れて欲しくないと思いますが、クライアントからは「改行ができない」などという話や「一行空けたいのにできない」という連絡がくることがありますので、自動的にタグが入ることを前提にコーディングやスタイルシートの作り方を考える、ということも重要です。

SafariやGoogle Chromeででフォントをさらにきれいに表示する方法
【WordPress】WordPressの【category/page/single.php】などでよく使う項目。