質問: WordPress 4.8.3, PHP 7.0.18, MySQL5.7 上記の環境で、ワードプレスのプラグイン開発を始めたのですが、アクションフックの save_post の仕組みでハマってしまいました。 ``` function testes_saving( $post_id ) { if ( wp_is_post_revision( $post_id ) ){ return; } die( '保存しました。' ); } add_action( 'save_post', 'testes_saving' ); ``` このような形でプラグインを作成した所、管理画面の新規投稿画面(/wp-admin/post-new.php)にアクセスしただけで、”保存しました。”と表示されてしまいます。(新規投稿画面は表示されていません。) 要望としては、新規投稿画面が表示され、内容を入力後に「公開」ボタンを押すことで、 testes_saving が実行されるような動きにしたいです。 Wordpress には、他にプラグインを導入しておらず、インストールしてから何も触っていない状態です。 色々検索していると、 edit_post を使用するといいということを発見しました。 多くのサイトでは、 save_postが紹介されているのですが、最新バージョンでの仕様が変わったのでしょうか? よろしくお願いします。
回答: まず、`save_post` のような影響が出やすい部分はそう変更されません。もし変更があったとしても、同じフック名を別の箇所で使いまわすことは考えにくいです。下記部分が最新のコードですが、変わっていません。 【post.php in tags/4.8.3/src/wp-includes – WordPress Trac】 ページを表示してすぐ実行されるということは、まず下記部分を確認してみてください。 1. `testes_saving`が他でフィルタ/フックに登録されている 2. 記述ミスで関数が思った挙動と違う動作になっている(デバッグモードになっていない) あと、新規作成のみに限定するなら引数も拾ったほうが良いでしょう。 ``` add_action( 'save_post', 'my_save_post', 10, 3 ); function my_save_post( $post_id, $post, $update ) { if ( $update ) return; // 更新時を除外 // 処理 } ``` 【WordPress 特定の固定ページを保存時に処理を実行したい。 - かもメモ】 【WP関数『wp_insert_post』に含まれるアクションフック5つ | sand a lot Web & Music Create [札幌]】 https://www.sandalot.com/wp関数『wp_insert_post』に含まれるアクションフック5つ/