WordPressでプラグイン開発~管理画面操作~
プラグインの操作にはアクションフックとフィルターフックという形があります。まずはアクションフックについてです。
プラグインでアクションフックを利用する
今回は管理画面が埋め込まれた事件で実行されるブックであるadmin_menuを使ってみたいと思います。これを作ることで管理画面に入れてプラグイン用のページを作ることができます。
my-plugin.phpに追記します。
function test_admin_memu() { add_menu_page( 'my-plugin','my-plugin','manage_options','myplugin_setting' ); } add_action( 'admin_menu', 'test_admin_memu' );
追記したら保存します。 すると、こんな感じで、管理画面に表示されます。
add_menu_page()はメニューを追加するタグで、この記述でmy-pluginを表示しています。
add_action()の第1引数は今回使うアクションフックのadmin_menuを指定しています。 第2引数で自分で作成した関数を指定します。
add_action()を書く場所は特に決まりは無いですが、バラバラだと迷いやすいので、プラグイン内でルールを決めて書くといいでしょう。
デバックのためにdieを使おう
定義した関数内でdie()を使用すると把握が楽になります。die()はメッセージと共に処理を停止します。
先ほどのコードを以下のように修正します。
function test_admin_memu() { add_menu_page( 'my-plugin','my-plugin','manage_options','myplugin_setting' ); die("メニューが追加されました"); } add_action( 'admin_menu', 'test_admin_memu' );
WorPressのページを読み込み直すと メニューが追加されましたが表示されます。 確認できたら、ひとまずdie()は消しておきましょう
投稿を保存したときにアクションを実行する
save_post というアクションフックを使って投稿を保存した時に、 決まった処理が実行できるようにしてみましょう。
function show_post( $post_id ) { if ( wp_is_post_revision( $post_id ) ){ return; } $post_title = get_the_title( $post_id ); $post_url = get_permalink( $post_id ); die( $post_title . $post_url ); } add_action( 'save_post', 'show_post' );
新規投稿してみると、このようになります。
wp_is_post_revision()でリビジョン機能による自動保存だった場合に処理を停止しています。
これは投稿が保存された時点で実行されるアクションにあるため更新ボタンをクリックした場合も自動でリビジョンした場合でも同じように実行されてしまうからです。
投稿内容を変更してみよう
先ほどの、show_postはコメントアウトしてください。
その下に以下を追記します。
function edit_post_content( $post_id ) { if ( wp_is_post_revision( $post_id ) ) { return; } remove_action( 'save_post', 'edit_post_content' ); $content = get_post_field('post_content', $post_id); wp_update_post( array( 'ID' => $post_id, 'post_content' => $content . 'ここの内容が追記されます' ) ); add_action( 'save_post', 'edit_post_content' ); } add_action( 'save_post', 'edit_post_content' );
基本的には、投稿が保存された時に実行され、wp_update_post()を使って投稿内容が更新されます。 この時に注意するのは、wp_update_post()で投稿が修正された時にも、save_postアクションに該当するため、wp_update_post()を実行する前に、 remove_action()が必要になります 。
このような機能を使えば、毎回の投稿に特定の内容をくっつけるといったルーティンワークを省くことができます!