アクションフック“save_post”でもステータス遷移情報を扱いたい!

ハーイ!みんなちゃんと公式リファレンス読んでる~?

うちのサイトも人のことは言えませんが、ブログ発信の情報は疑いも持って読まないといけないなと改めて実感した今日このごろ…。

 

…と、心の闇を吐き出した所で、唐突に本題に入ります。

 

私は“投稿公開(もしくは公開取り消し)時に、投稿データを元に他の投稿のメタデータを更新したい”と思った。

投稿保存時に処理を行いたいので、アクション“save_post”内で投稿保存前・後のステータスが知りたいのですが、Wordpressには未だ明るくなく、とりあえずGoogleさんにお尋ねする事に…

 

そして、開いたサイトには要約すると「ステータス遷移が感知できる“transition_post_status”さんが便利!save_postさよなら!的な事が書かれていたので、私は思った…

 

「“save_post”よりも便利な上位互換アクション“transition_post_status”ってのがあるのか!パネェ!!」

↑微塵にも疑いを持たなかった自分をぶん殴りたい

 

“transition_post_status”を使用して実装を進めた私の衝撃の結末は…!

 

「フックされるタイミングが違うじゃねぇかwww 書いた処理どうしてくれんだ…

 

ハイ、“save_post”は投稿保存に実行され、“transition_post_status”は投稿ステータスが変わるときつまり投稿保存に実行されます。
つまりは、“transition_post_status”内で、例えば“get_the_tags($post->ID)”なんてDBから値を取得する処理を記述すると、編集前の古い情報が取得されます!

 

“transition_post_status”で変更後の情報は $_POST から取得出来なくはないけれど、予約投稿時に不都合ありそうな気もするので却下。

“save_post”でも、ゴニョゴニョすれば変更前・後のステータスは把握出来るそうだけど、まどろっこしそう。

 

私は思った(本日3度目)

もう、コレでよくないですか!?

 

ようは、勝手にグローバル変数 $transition_post_status を作って、アクション“transition_post_status”フックでステータス遷移情報をぶち込むというやっつけ手段。

これで“save_post”内でも以下のようにステータス遷移情報を参照できるよ!やったね!

 

 

もちろん、予約投稿のタイミングでも問題なく参照可能です。

 

さいごに

あまりWordpressのカスタマイズ時に新規でグローバル変数を定義する事はしませんよね多分。
私が見つけられなかっただけか、このようなやり方を紹介しているサイトも見当たらなく…しかし、たまにはこんな手法もいかがでしょうか!?

 

“transition_post_status”が持つステータス遷移情報を“save_post”で使えるようになるのは、かなり便利だと思うのです!

 

挙動の問題の無さはある程度テスト済みですが、ご意見があればコチラまで→ 当サイトTwitterアカウント(@tech_rdy_jp)