フィルター、アクションを使ったプラグインの作成方法をまとめました。
参考サイト
http://net.tutsplus.com/articles/news/a-crash-course-in-wordpress-plugin-development/
プラグインの登録方法は下記ページ参照。
簡単なWordPressのプラグインを実際に作ってみる
※目次をクリックすると目次の下部にコンテンツが表示されます。
・フックによって特定の時点で関数を実行したり、WordPress関数の振る舞いや出力内容を変更することが出来る。
・フックは、プラグインがWordPressの機能を拡張するための主要な方法。
・フックは様々なパラメータを持つPHP関数。
・フックには次の2種類がある。
①アクション
・実行中の特定のポイントもしくは特定のイベント発生時にWordPressのコアが起動させるフック。
・アクションAPIを使用して、これらのポイントで実行中のPHP関数を一つ以上指定することができる。
②フィルター
・データベースに追加する前やブラウザのスクリーンに送り出す前にさまざまなタイプのテキストを改造するためにWordPressが起動させるフック。
・プラグインは、フィルターAPIを使用して、これらのタイミングで特定のタイプのテキストを改造するために一つ以上のPHP関数の実行を指定することができる。
・アクションフック一覧
●add_action
・特定のアクションに関数をフック。
1)サンプル1
add_action(‘wp_footer’, ‘mp_footer’);
・フッターが表示される時に”mp_footer()”関数を実行させる。
・一番目の引数’wp_footer’がアクションフック名で、二番目の引数が実行される関数。
・アクションフックに’wp_footer’を指定する事によって、フッターが表示される際に’mp_footer’関数を実行できるようになる。
2)サンプル2
add_action( 'comment_post', 'wp_email_new_comment' ); function wp_email_new_comment() { wp_mail( 'admin@example.com', 'New blog comment', '○○サイトでコメントがつきました' ); }
・”comment_post”アクションを使ってコメント登録時にメールを送信する。
※comment_postアクション
コメントがデータベースに保存される直前に実行する。
・フィルターフック一覧
●add_filter()
・指定したフィルターフックに、関数をフックする。
・関数の最後に表示または保存するテキストをリターンする文を記述する。
1)サンプル1
・投稿内の末尾にコメントを追加。
・H2タグをH3タグに変換。
function Post_Formatting($content) { $end_of_post = "投稿の最後に加えるコメント"; $content = preg_replace('/<h2>/i', '<h3>', $content); $content = preg_replace('/<\/h2>/i', '</h3>', $content); return (is_single()) ? $content . $end_of_post : $content; } add_filter('the_content', 'Post_Formatting');
・add_filter(‘the_content’, ‘Post_Formatting’);
第1引数の’the_content’は、データベースから取得した投稿コンテンツを画面に出力する前に適用されるフィルターフックで、第2引数の’Post_Formatting’関数で投稿の内容を取得・加工してブラウザに表示する。
・’Post_Formatting’関数で投稿末尾にテキストを追加し、H2タグをH3タグに置換している。
2)サンプル2
・”the_content”フィルターを使って記事本文の下に”Follow me on Twitter!”のリンクを追加する例。
・データベース内のデータを変更せずに、表示内容だけ変更できる。
※the_contentフィルター
データベースから取得した記事本文を画面に出力する前に適用される。
add_filter('the_content', 'myplugin_the_content'); function myplugin_the_content($content) { $output = $content; $output .= '<p>'; $output .= '<a href="http://twitter.com/username">Follow me on Twitter!</a>'; $output .= '</p>'; return $output; }