16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Wordpress の save_post に頼らない便利なフックのかけ方

Last updated at Posted at 2017-03-08

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 で済ましてしまう人が多いですが、これらを利用するのが正しい記述方法でしょう。

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?