Wordpress において記事の登録や更新時の処理にフックをかけるときは以下のような方法をよく取ります。
function my_hook( $post_id ) {
}
add_action( 'save_post', 'my_hook', 10 );
あなたが運営または構築中の Wordpress のサイトに「英語 (english)」というポストタイプがあるとします。
そしてそのポストタイプがペンディングとして登録・更新された場合にのみ処理を実行したい場合、以下のような方法が一番簡単です。
function my_hook( $post_id, $post ) {
if ( 'english' !== $post->post_type || 'pending' !== $post->post_status ) {
return false;
}
}
add_action( 'save_post', 'my_hook', 10, 2 );
以上で上げた条件以外は return をします。
※add_action では戻り値の判定はしないので、単純に return; だけでもいいです
実はこれをもっと簡単に記述できます。
それが以下です。
function my_hook( $post_id ) {
}
add_action( 'pending_english', 'my_hook', 10 );
アクション名を {status}_{post_type}
とすることで、フックの実行をそのステータスとポストタイプに限定できるのです。
実は公式ドキュメントに記載があります。
投稿ステータスの遷移について三種類のアクションフックがあります:
transition_post_status/en
{old_status}_to_{new_status} – old_status は以前の、new_status は新しいステータス。
{status}_{post_type} – status は新しいステータス、post_type は投稿タイプ。
save_post で済ましてしまう人が多いですが、これらを利用するのが正しい記述方法でしょう。