新規公開と更新の見分け方 - WordPress プラグイン開発

WordPress プラグインでのアクションの概要と問題点

WordPress のプラグインを開発する時は、WordPress の内部で発生するアクション (action) に対して、 関数をフックさせます。

例えば、記事を公開するときに何かしたい場合は、publish_post というアクションに、 自前の関数をフックします。

例えば、public_post アクション発生時に my_func1 という関数を呼びたい場合には、 WordPress が持つ、add_action を次のように呼び出します。

add_action ( 'publish_post', 'my_func1' );

これで記事 (post や page) の新規公開時または更新時に、my_func1 を呼び出すことができます。

実は、ここにひとつちょっとした問題があります。

いま、しれっと「新規公開時または更新時に」 と書きましたが、 WordPress のアクション・フックで新規公開と更新を区別したい場合も当然あります。

実は edit_post というアクションもあるのですが、edit_post は publish_post 時に続けて呼び出されますので、 edit_post は使えません。

そこで、記事の新規公開と更新を区別したい場合にどうしたらよいか、という点についてこの資料で説明します。

公開時の 「元の記事の状態」 で区別ができる!

WordPress の記事には次の3つの状態があります。

  • publish (公開)
  • draft (下書き)
  • pending (レビュー待ち)

そして、WordPress の管理画面では、hidden 値として original_post_status という値を保持しているのですが、 この値が、publish ボタン押下前の状態を保持しています。

具体的には次のようになります。

元の状態original_post_status 値
下書きdraft
レビュー待ちpending
公開済みpublish

つまり、publish_post のアクション・フックにて、$_POST['original_post_status'] をチェックして、 その値が publish であれば既に公開されていた記事の更新であり、それ以外であれば、 非公開だった記事が公開状態に変更された、ということがわかります。

尚、この内容は独自に調べたものであり、オフィシャルな推奨の方法ではないかもしれません。
もし他に方法をご存知の方がいましたら、教えていただければ幸いです。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説