新規公開と更新の見分け方 - 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 であれば既に公開されていた記事の更新であり、それ以外であれば、 非公開だった記事が公開状態に変更された、ということがわかります。
尚、この内容は独自に調べたものであり、オフィシャルな推奨の方法ではないかもしれません。
もし他に方法をご存知の方がいましたら、教えていただければ幸いです。