functions.phpで汎用性が高そうなもの

functions.phpで汎用性が高そうなもの

WordPressを使うときにfunctions.php内に記述すると良さそうなコードをまとめました。

functions.phpとは

WordPressのテーマの設定やカスタマイズを行うときに編集するファイルです。基本的にはサイトと管理画面、全てのページで読み込まれるので、サイト全体の設定をする際に編集するといいと思います。
わざわざプラグインを使用しなくてもfunctions.phpに記述するだけでできることも多いです。

編集する際はダウンロードするなり、バックアップを取っておいて下さい。
もし何らかのエラーがあったときにサイト全体が表示されなくなったりするので、その場合のためのバックアップです。

使うことが多そうなもの

head内のmeta情報を整理する

headタグ内に出力されるmetaのうち不要な情報を非表示にします。

//Wordpressのバージョン非表示
remove_action('wp_head','wp_generator');

//WordPress以外の外部ツールからの投稿プロトコルのタグ非表示
remove_action('wp_head', 'rsd_link');

//Windows Live Writerで投稿する場合に必要なタグ非表示
remove_action('wp_head', 'wlwmanifest_link');

//ページネーション非表示
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');

//短縮リンク非表示
remove_action('wp_head', 'wp_shortlink_wp_head');

セキュリティー上、少なくともWordPressのバージョンは非表示にしておくといいと思います。

アイキャッチ画像を使えるようにする

投稿からアイキャッチ画像が使えなくなっている場合は、使えるようにしておきましょう。

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

記事抜粋の文末を変更する

WordPressでは

<?php the_excerpt(); ?>

で記事抜粋を表示してくれます。
日本語を出力する場合は抜粋がうまくいかないことがあるので、デフィルトで入っているプラグイン
WP Multibyte Patchを有効化しておきましょう。これで初期設定で110文字が抜粋されます。

抜粋の文末「[…]」を変更する

//excerptの文末を変更
function new_excerpt_more($more) {
    return '。'; //文末にしたい文字を入力
}
add_filter('excerpt_more', 'new_excerpt_more');

空欄なら何も出力されないようになります。

もし抜粋の文字数を変更したかったら

function new_excerpt_mblength($length) {
    return 30; //抜粋したい文字数を入力
}
add_filter('excerpt_mblength', 'new_excerpt_mblength');

サイドバーウィジェットを表示させる

テーマによっては最初から使える場合もありますが、もしウィジェットを使用したい場合はサイドバーを追加しましょう。
追加後は外観ウィジェットが使えるようになります。
サイドバーは複数追加可能です。

//サイドバーウィジェット追加
if (function_exists('register_sidebar')) {
//サイドバー追加
 register_sidebar(array(
 'name' => 'サイドバー1', //表示させる名前
 'id' => 'sidebar1', //出力の際に使用するid
 'description' => '', //画面に表示させる説明
 'before_widget' => '', //コンテンツの前に入れるタグ
 'after_widget' => '', //コンテンツの後に入れるタグ
 'before_title' => '<h1>', //タイトルの前に入れるタグ
 'after_title' => '</h1>' //タイトルの後に入れるタグ
 ));
//サイドバー追加ここまで
}

複数のサイドバーを使用したい場合は上記の「サイドバー追加〜ここまで」の中をコピーしていって下さい。

投稿に自動的にタグが挿入されるのを防ぐ

WordPressでは投稿に対して自動的にpタグやbrタグを出力してくれますが、これが邪魔になるときがあります。
タグが出力されないように設定します。

//自動的にタグが挿入されるのを防ぐ
remove_filter('the_content', 'wpautop');//記事本文
remove_filter( 'the_excerpt', 'wpautop' );//記事抜粋
remove_filter('term_description', 'wpautop');//タームの説明文

検索から固定ページを除外する

WordPressではデフォルトで検索機能が備わっています。
しかし、検索をすると固定ページも検索対象に入ってしまいます。
これを投稿記事のみ検索できるように変更します。

//検索から固定ページを除外
function SearchFilter($query) {
if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
$query->set( 'post_type', 'post' );//post type = post = 投稿のみ対象にする
}
}
add_action( 'pre_get_posts','SearchFilter' );

画像に自動挿入されるclassを削除する

投稿のアイキャッチ画像や投稿に挿入した画像にはデフォルトでclassが付与されます。
それぞれ使わない場合は削除してしまいましょう。

//アイキャッチ画像と挿入画像のclassを削除
add_filter( 'post_thumbnail_html', 'custom_attribute' );//アイキャッチ画像
add_filter('get_image_tag', 'custom_attribute');//挿入画像
function custom_attribute( $html ){
    $html = preg_replace( '/class=[\'"]([^\'"]+)[\'"]/i', '', $html );// classを削除する
    return $html;
}

もしリンクも削除したかったら

上記の記述に追加する方法でもできますが、管理画面からでも設定を変えることができます。

「管理画面のURL/index.php」から「管理画面のURL/options.php」にアクセスします。
ここではWordPressの様々な設定を変えることができます。
その中の「image_default_link_type」「none」にするとデフォルトで画像にリンクが出力されなくなります。

画像に自動挿入されるclass,width,heightを削除する

上のと似ていますが、こちらは挿入されるwidthとheightも削除しています。

//アイキャッチ画像と挿入画像のclass,width,heightを削除
add_filter('get_image_tag', 'custom_attribute');
add_filter( 'post_thumbnail_html', 'custom_attribute' );
function custom_attribute( $html ){
    // width height classを削除する
    $html = preg_replace('/(width|height)="\d*"\s/', '', $html);
    $html = preg_replace( '/class=[\'"]([^\'"]+)[\'"]/i', '', $html );
    return $html;
}

タグクラウドに自動挿入されるclass,title,styleを削除する

タグクラウドを出力すると自動的にclass,title,styleが付与されます。
デフォルトだとtitleにはそのタグ内のトピック数が代入されて、マウンオンで表示されます。
styleにはそれぞれfont-sizeが入ります。
このままCSSでfont-sizeを変更する場合、あまり使いたくない「!important」を使わなければならないので、それぞれ必要がなければ削除してしまいましょう。

// タグクラウドのclass,title,styleを削除
function remove_title_wp_tag_cloud( $text) {
    $match = array(
    "/ class='tag-link-(\d+)'/i",       //classを削除
    "/ title='([^']+)'/i",          //titleを削除
    "/ style='font-size: \d+(\.)*\d*(pt|px|em|\%);'/i", //styleを削除
  );
  return preg_replace( $match, '',  $text );
}
add_filter( 'wp_tag_cloud', 'remove_title_wp_tag_cloud');

検索結果が1件しかない場合はそのページにリダイレクトさせる

サイト内検索を使って検索結果が1件のみの場合、直接そのページに行けるようにします。かなり便利です。

// 検索結果が1件しかない場合はそのページにリダイレクトさせる
add_filter( 'wp_calculate_image_srcset', 'disable_srcset' );
function redirect_to_only_search_post() {
  if (is_search()) {
    global $wp_query;
    if ( $wp_query->post_count == 1 ) {
      wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
    }
  }
}
add_action( 'template_redirect', 'redirect_to_only_search_post' );

レスポンシブイメージを無効にする

自動で挿入されるレスポンシブ用の画像を出さないようにします。

//レスポンシブイメージを無効にする
function disable_srcset( $sources ) { return false; }
add_filter( 'wp_calculate_image_srcset', 'disable_srcset' );

お問い合わせページ以外にContact Form 7のスクリプトを読み込まなくする

こちらはプラグインのContact Form 7を使用している人向けです。
通常だと全ページでContact Form 7のスクリプトが読まれますが、実際はフォームを使用するページのみ読み込ませれば良いです。
ページスラッグは合うように変更して下さい。

//お問い合わせページ以外にContact Form 7のスクリプトを読み込まなくする
function my_contact_enqueue_scripts(){
wp_deregister_script('contact-form-7');
wp_deregister_style('contact-form-7');
if (is_page('contact')) {
  if (function_exists( 'wpcf7_enqueue_scripts')) {
    wpcf7_enqueue_scripts();
  }
  if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
    wpcf7_enqueue_styles();
  }
}
}
add_action( 'wp_enqueue_scripts', 'my_contact_enqueue_scripts');

絵文字用のjavascriptとcssを読み込まなくする

head内に絵文字を使用するためのjavascriptとインラインCSSで「img.emoji{}」のようなものが挿入されていました。
使わない場合は削除しましょう。

//絵文字用のjavascriptとcssを読み込まなくする
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

dns-prefetchを削除

head内に下記のような記述が挿入されていました。

<link rel='dns-prefetch' href='//s.w.org'>

サイトの表示速度を改善する記述らしいですが、どうやらHTTPSでは使えないようなので、削除します。

//dns-prefetchを削除
add_filter( 'emoji_svg_url', '__return_false' );

下記の記事が大変参考になりました。

参考記事

DNSプリフェッチでウェブページの読み込み速度をスピードアップ
https://www.suzukikenichi.com/blog/dns-prefetching/

Open Sansのフォントを読み込まないようにする

WordPress 3.8で追加されたOpen Sansのフォントの読み込みをなくします。

//Open Sansのフォントを読み込まないようにする
if (!function_exists('remove_wp_open_sans')) :
function remove_wp_open_sans() {
wp_deregister_style( 'open-sans' );
wp_register_style( 'open-sans', false );
}
add_action('wp_enqueue_scripts', 'remove_wp_open_sans');
endif;

特定のカスタム投稿タイプのアーカイブページの表示件数を変える

管理画面の表示設定の数とは違う数で表示させたいときに使います。数とスラッグは応じて変更してください。

下記だとカスタム投稿スラッグ「test」のアーカイブページの表示件数が24件になります。

// 特定のカスタム投稿タイプのみ表示件数を変える
function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    if ( $query->is_post_type_archive( 'test' ) ) {
        $query->set( 'posts_per_page', '24' );
    }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

最後に

functions.phpでは設定の変更のほかに、ショートコードを登録したり、更に利便性を高めることができます。
プラグインでも解決できることは多いですが、まずはfunctions.phpで解決できないか探してみることをオススメします。