ちょっと必要になったので WordPress の Plugin をさくっと作ってみました。
作ったのは投稿内のタグを別のタグに置換するだけのプラグインです。
どうせなので作り方を書いてみます。
プラグインの作り方
php と wp との連携方法がわかれば簡単に作れちゃいます。
今回作成するのは投稿内にある <p class="subtitle"> を h3 に置換するプラグインです。今まで p タグとクラスでやってたけどちゃんと見出しタグを使おうかなーと思ってですね。。。で、単純にDB上でポスト内のタグを置換するとデザイン変更した際にまた置換しなおさないといけないのでプラグインで対応する事にします。
名前とかファイル名とか
管理がややこしいので他のプラグインとかぶらなそうな名前が良いですね。自分しか使わないなら適当で良いです。自分の名前いれたりとか。
ファイル構造
plugins ディレクトリの中に php ファイル置けば plugin として認識されるようですがファイル一個だけの場合でもディレクトリ作成したほうがわかりやすいでしょう。
自分はサーバ上で作業してるのでこんな感じ。
$ pwd
/home/ryomatsu/public_html/example.com/wp/wp-content/plugins
$ mkdir test
$ cd test
$ touch test.php
プラグインの詳細情報を書く
ファイルを作成したら編集しましょう。
$ cat test.php
<?php /*
**************************************************************************
Plugin Name: Test
Plugin URI: http://loumo.jp
Version: 0.0.1
Description: convert subtitles in post
Author: ryomatsu
Author URI: http://loumo.jp
**************************************************************************
上記コメントに書いた内容がプラグイン一覧や公開した時に表示される情報になります。自分は公開するつもりが無いので適当です。
とりあえず Test でやってます。有効化しておきましょう。
コード書く
php でごりごり書いていきます。
add_filter( 'the_content', 'loumo_convert_html' );
function loumo_convert_html($content) {
$content = preg_replace('/<p class="subtitle">(.*?)<\/p>/', '<h3>$1</h3>', $content);
$content = preg_replace('/<p class="subtitle2">(.*?)<\/p>/', '<h4>$1</h4>', $content);
return $content;
}
preg_replace で文字列置換するだけなので単純ですね。
上記スクリプトでは、add_filter で投稿を表示する際にフィルターとして上記の関数を通すようにしています。
これで保存すればちゃんとタグが置換されるはずです。
プラグインを動作するための仕組み
WordPress の動作に干渉するための関数は wp-include/plugin.php に定義されています。上記コードで使用した add_filter 以外にもいろいろあります。
taglist.vim で表示させてみます。
plugin.php (/home/ryomatsu/public_html/example.com/wp/wp-includes)
|- function
|| add_filter
|| has_filter
|| apply_filters
|| apply_filters_ref_array
|| remove_filter
|| remove_all_filters
|| current_filter
|| add_action
|| do_action
|| did_action
|| do_action_ref_array
|| has_action
|| remove_action
|| remove_all_actions
|| plugin_basename
|| plugin_dir_path
|| plugin_dir_url
|| register_activation_hook
|| register_deactivation_hook
|| register_uninstall_hook
|| _wp_call_all_hook
|| _wp_filter_build_unique_id
ちなみに管理画面をいじる場合は wp-admin/includes/plugin.php に同様な関数群があります。
ざっと他のプラグインを眺めてみた感じ、よく使うのは add_filter と add_action でしょうか。今回は表示を替えるだけなので add_filter を使用しています。
こんな感じで結構簡単に作れちゃいます。わからなくても他のプラグインのコードを真似ればいろいろ作れそうですね。
コメント