WordPress のカスタマイズで、 functions.php がカオス化してきたので整理しました。
そこそこの処理量があれば一つづつプラグイン化しても良いのですが、数行で済んでしまうようなスニペットの場合だとちょっと非効率です。
そこで以前にちらっと見た、スニペットをまとめるためのプラグインというものを自作してみました。
※ 参考リンクは失念。
目次
スポンサーリンク
スニペットをまとめるプラグインの作成
今回は “My Functions Snippets” という名前でプラグインを作成しました。
まずはプラグインディレクトリを作成し、その中に snippets というディレクトリ名でスニペット置き場を作ります。
# cd wp-content/plugins # mkdir my-functions-snippets # cd my-functions-snippets # mkdir snippets # vi my-functions-snippets.php
プラグインのメインファイルは以下の様な感じで作成しました。
<?php /* Plugin Name: My Functions Snippets Description: コードスニペットまとめプラグイン */ if ( ! defined( 'snippets_dir' ) ) { define( 'snippets_dir', dirname( __FILE__ ) . '/snippets' ); } foreach ( glob( snippets_dir . '/*.php') as $file ) { include_once( $file ); } ?>
ここまで書いたら後はいつも通りプラグインを有効化してあげます。
プラグイン自体は snippets ディレクトリにある PHP を読み込んでいくという簡単な処理内容で、追加したい処理等は PHP で書いてこのディレクトリに入れるだけで OK という感じです。
不要になったり、停止したいスニペットは拡張子を .php 以外にすれば読み込まれません。
これで functions.php もすっきりするし、テーマ変更をした場合でも functions.php から移植するという手間も省けます。
※ ある程度汎用的に使えるスニペットに限定されますが。
このプラグインはサンプルとして以下に置いてみました。いくつか利用しているスニペットも詰めたので以下で説明していきます。
My Functions Snippets
WordPressで利用しているスニペット
スニペット自体もある程度まとめてファイル化しています。同梱されているファイル一覧は以下です。
- no-self-ping.php (セルフピンバックの停止)
- remove-cssjs-version.php (css, js のバージョン表示を除去)
- remove-wp-actions.php (wp_head から不要な情報を除去)
- replace-category-rel.php (the_category の出力を html5 準拠に修正)
no-self-ping.php
セルフピンバックを停止するスニペットです。記事に自分自身の URL を貼り付けるとトラックバックの通知が飛んできて鬱陶しいから止めるとかいうやつです。
<?php function no_self_ping( &$links ) { $home = get_option( 'home' ); foreach ( $links as $l => $link ) { if ( 0 === strpos( $link, $home ) ) { unset( $links[$l] ); } } } add_action( 'pre_ping', 'no_self_ping' ); ?>
remove-cssjs-version.php
WordPress は css, js のリンクにバージョン情報を付与した状態で出力しようとするのでこれを除去するスニペットです。
<?php function remove_cssjs_ver( $src ) { if( strpos( $src, '?ver=' ) ) { $src = remove_query_arg( 'ver', $src ); } return $src; } add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 ); add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 ); ?>
remove-wp-actions.php
wp_head で出力している不要なメタ情報の除去と、ログイン状態で表示されるアドミンバーを非表示にするスニペットです。
<?php if ( ! is_admin() ) { add_filter( 'show_admin_bar', '__return_false' ); remove_action( 'wp_head','wp_generator' ); remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); remove_action( 'wp_head', 'wp_shortlink_wp_head' ); } ?>
ただ、これを含んだ状態でプラグインを有効化すると以下の様なメッセージが表示されます。
header 関数の関係で初回のみこの警告が出ますが、この警告は無視しても特に問題はないです。
replace-category-rel.php
WordPress の the_category 関数が出力する rel 属性が html5 準拠となっていないのを修正するスニペットです。
<?php function replace_category_rel( $html ){ $html = preg_replace( '/rel="category(|[_a-zA-Z0-9\s]+)"/', 'rel="tag"', $html ); return $html; } add_filter( 'the_category', 'replace_category_rel', 10, 1 ); ?>
これで functions.php がスッキリしました。
ついでにスニペットが沢山公開されているサイトも参考までに書いておきます。