work.log

元エンジニアの備忘録的ブログ

WordPressのスニペットをまとめるプラグイン

投稿:2013-08-14 19:50  更新:

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 );
}

?>

ここまで書いたら後はいつも通りプラグインを有効化してあげます。

wordpress-plugin-development-008-01

プラグイン自体は snippets ディレクトリにある PHP を読み込んでいくという簡単な処理内容で、追加したい処理等は PHP で書いてこのディレクトリに入れるだけで OK という感じです。

不要になったり、停止したいスニペットは拡張子を .php 以外にすれば読み込まれません。

これで functions.php もすっきりするし、テーマ変更をした場合でも functions.php から移植するという手間も省けます。

※ ある程度汎用的に使えるスニペットに限定されますが。

このプラグインはサンプルとして以下に置いてみました。いくつか利用しているスニペットも詰めたので以下で説明していきます。

My Functions Snippets

Download – my-functions-snippets.zip

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' );

}
?>

ただ、これを含んだ状態でプラグインを有効化すると以下の様なメッセージが表示されます。

wordpress-plugin-development-008-02

header 関数の関係で初回のみこの警告が出ますが、この警告は無視しても特に問題はないです。

replace-category-rel.php

WordPress の the_category 関数が出力する rel 属性が html5 準拠となっていないのを修正するスニペットです。

関連記事

WordPressのthe_categoryをフィルターフックする

<?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 がスッキリしました。

ついでにスニペットが沢山公開されているサイトも参考までに書いておきます。

wpsnipp

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間