WordPressプラグインの作り方 〜フィルタ編〜

以下の記述は WordPress 2.8 日本語版 を前提としています。

WordPressプラグインの作り方メモ、その1。

WordPressで記事を書く際も「はてな記法」的な独自記法を使いたい…というような要望は、記事本文へフィルタをかけるプラグインを作成することによって簡単に実現できます。*1

こんな感じ。

<?php
/*
Plugin Name: My Content Filter
Plugin URI: http://d.hatena.ne.jp/shibason/20090612/1244781801
Description: 記事本文ではてな記法ライクな独自記法を使用できるようにします。
Version: 1.0
Author: shibason
Author URI: http://d.hatena.ne.jp/shibason/
*/

function my_content_filter($content) {
  /* 小々見出し記法 */
  $patterns[] = '/(^|\n)\*\*\*([^\r\n]*)/';
  $replacements[] = '$1<h5>$2</h5>';
  /* 小見出し記法 */
  $patterns[] = '/(^|\n)\*\*([^\r\n]*)/';
  $replacements[] = '$1<h4>$2</h4>';
  /* 見出し記法 */
  $patterns[] = '/(^|\n)\*([^\r\n]*)/';
  $replacements[] = '$1<h3>$2</h3>';

  /* リンク記法(タイトルあり) */
  $patterns[] = '/\[(http:|https:)([^:\]]*):title=([^\]]*)\]/';
  $replacements[] = '<a href="$1$2" target="_blank">$3</a>';
  /* リンク記法(タイトルなし) */
  $patterns[] = '/\[(http:|https:)([^\]]*)\]/';
  $replacements[] = '<a href="$1$2" target="_blank">$1$2</a>';

  return preg_replace($patterns, $replacements, $content);
}
add_filter('the_content', my_content_filter, 9); 
?>

正直はてな記法とは比較するのもおこがましいようなシンプルなフィルタですが、そこはまぁサンプルですのでご勘弁を。*2

ポイントは add_filter 関数に渡す第三引数です。ここにはそのフィルタの優先度を指定します。この優先度が小さいフィルタほど先に適用されます。

第三引数を渡さなかった場合、デフォルトの 10 が優先度として使われるのですが、そうするとWordPress組み込みのデフォルトフィルタが先に適用されてしまい、改行が br タグに変換されてしまったりと、正規表現をかける上で色々面倒な状態になってしまいますので、明示的に10より小さい値を指定して先にフィルタをかけてやる必要があります。

こいつを my-content-filter.php とかなんとか適当な名前で保存して、 wordpress/wp-content/plugins ディレクトリに放り込み、「プラグインの管理」画面で有効化。

すると


こんな感じに入力した記事本文が


こんな感じで表示されるようになります。

めでたしめでたし。

*1:記法の処理そのものの難易度は別として。

*2:ちなみに、もっときちんとしたはてな記法を使いたい方は、既にプラグインが存在しますので、そちらをお使いください。