[WordPress]投稿の更新日時をコードからアップデートする方法

また、ニッチな投稿ですはい。

 

正直、更新日時のネタだと…

 

世間のブログ「投稿に更新日時を表示させる方法!」「投稿更新時に更新日時を変更しない/する方法」

 

とかだと思う…んですけど。

 

わたし「特定投稿の更新日時を現在日時にアップデートする方法」

 

何この世間とのズレ

※何がしたいんだコイツと思った人は、投稿末尾の「さいごに」項だけでも読んでってください…

まぁ、ズレなんて1ミリも気にせず、いつもどおり書くんですけどね!

 

ソースコードから、特定投稿の更新日時を現在日時にアップデートする方法

更新日時を現在日時に更新する場合には、投稿を更新する wp_update_post 関数が使用できます。
wp_update_postは、データベースにある投稿および固定ページを更新するための関数。
第1引数に”ID”(投稿ID)を含む配列を渡すことで投稿内容を更新出来ます。

 

サンプル

 

wp_update_post の戻り値

wp_update_post 関数は第2パラメータ($wp_error)省略時、アップデート成功時は投稿ID、失敗時は 0 を返します。
また、第2引数($wp_error)に true を指定した場合は、WP_Errorオブジェクトを返します。エラー判定は is_wp_error 関数を用います。

 

この方法で更新日時の指定はできません!

wp_update_post 関数は、処理内で wp_insert_post 関数を呼び出すため、更新日時(post_modified, post_modified_gmt)にはそれぞれ現在日時(ローカルタイム,GMT)が設定されます。

 

「save_post」アクションフック内で処理する場合は無限ループに注意!

wp_update_post 関数を実行すると、save_postアクションが実行されます。
そのため、save_postアクション内で wp_update_post 関数を使用する場合、一度当該アクションを remove_action しなければ無限ループする可能性があります。

 

save_postを発火させたくない場合、以下のようにSQLを直接実行する方法も検討してみて下さい。

 

 

さいごに

こんな事をしたい人は少ないかと思いますが、私には必要があったんです…。

 

今回、私が必要としたのは、以下のようなシチュエーション。

・固定ページに、独自ショートコードを用いて、特定のカスタム投稿タイプ&特定のパラメータを持つ内容を一覧表示している。
・固定ページの記事ヘッダ部に投稿の最終更新日を表示させたいが、内容はカスタム投稿依存のため、固定ページそのものは更新していない。
・固定ページの最終更新日には最後に更新したカスタム投稿の最終更新日を表示したい。

 

だいたいこんな感じ。

 

これを解決する為に思いついた方法で、手っ取り早そうだったのが save_post 内での固定ページの更新日時アップデートだった訳です。
これなら、表示時にカスタム投稿の最終更新日時を毎回取得したり、テンプレートの更新日時の表示条件分岐したりする必要も無いですしおすし。