前回、投稿のステータスが変わったときに動作するtransition_post_statusフックについて紹介しました。

transition_post_statusフックを使って投稿のステータスが変わったタイミングで処理をする方法

投稿のステータスが変わったときに動作するフックは、transition_post_statusフック以外にもあります。今回はステータスが変わったタイミングで動作させる方法を紹介します。

{old_status}_to_{new_status}フック

{old_status}_to_{new_status}フックは特定の投稿ステータスから特定の投稿ステータスに変わるタイミングで動作するフックになります。{old_status}や{new_status}はフック名ではなく遷移するステータスです。

例として下書きから公開になった場合にフックを動作させたい場合だとdraft_to_publishフックというフック名になります。

{old_status}_to_{new_status}フックは$postの投稿オブジェクトを引数としてコールバック関数に渡します。

承認待ちから公開になったときに動くサンプルがこちらです。

functions.php
function pending_to_publish_transition($post) {
    // 承認待ちから公開になったときにやりたい処理
}
add_action(  'pending_to_publish',  'pending_to_publish_transition', 10, 1 );

{old_status}_to_{new_status}フックは投稿ステータスが変わるタイミングを限定できることに利点があります。transition_post_statusだと特定のステータスから変わったタイミングの場合だけ処理したいという場合はnew_statusとold_statusの判定をしないといけません。

しかし、{old_status}_{new_status}フックを使えば判定をすることなく処理することができます。

{status}_{post_type} フック

{status}_{post_type}フックは特定の投稿タイプが特定のステータスになったら動作するフックになります。{old_status}_{new_status}フックと同じように{status}や{post_type}はフック名ではありません。

{status}_{post_type}フックは{old_status}_{new_status}フックとは違い投稿の場合に問いません。例として公開済になった「News」というカスタム投稿タイプの場合に動作させるみたいなこともできます。

{status}_{post_type}フックには$IDの投稿IDと$postの投稿のオブジェクトを引数としてコールバック関数に渡します。

以下が公開済みになった「News」というカスタム投稿タイプの場合のサンプルです。

functions.php
function publish_news_post_type($ID, $post) {
    // 公開済みになったNewsのカスタム投稿タイプの場合にやりたい処理
}
add_action(  'publish_news',  'publish_news_post_type', 10, 2 );

{status}_{post_type}の利点はカスタム投稿タイプを絞って処理することができる点にあります。transition_post_statusフックや{old_status}_to_{new_status}フックでも$postから投稿タイプを判定して処理することができますが、{status}_{post_type}だとその必要はありません。

まとめ

今回は、投稿のステータスによって処理をする関数やテクニックいろいろでtransition_post_statusフック以外にも{old_status}_to_{new_status}フックや{status}_{post_type}フックを紹介しました。

基本的にtransition_post_statusフックでいいと思いますが、特定のタイミングだけとか特定のカスタム投稿タイプだけとかに絞って公開ステータスが変わったタイミングで動作させたいといった場合に使えます。