【WordPress】サイトの最終更新日を取得する方法
更新日:2022/12/20
WordPressサイトで何らかの記事が最後に変更された日、つまりサイトの最終更新日を取得する方法をお伝えします。
get_lastpostmodified()関数
サイトの最終更新日は、get_lastpostmodified()関数で取得できます。
定義
get_lastpostmodified( $timezone = 'server', $post_type = 'any' )
- $timezone:
次の3つの値を指定できます。
値 意味 詳細 'server' サーバー上での日時 post_modified_gmtフィールドの値に、gmdate( 'Z' )の結果を加算して返す 'blog' 変更日時 post_modifiedフィールドの値を返す 'gmt' 変更日時(GMT) post_modified_gmtフィールドの値を返す post_modifiedフィールドは、GMT時間にWordPressの一般設定のタイムゾーンを考慮した値です。
サーバーのタイムゾーンが設定されていないケースがあるので、Webページに表示する場合は 'blog' を指定した方がいいです。 - $post_type:
対象とする投稿タイプを指定します。
全てを対象とするときは、'any'を指定します。
戻り値は、Y-m-d H:i:s 形式でフォーマットされます。
これは、年4桁、他は2桁です。
例:2022-01-02 01:02:03
ただし、テーマやプラグインで後述のフィルターを呼び出している場合、このフォーマット以外の結果が返る可能性があります。
結果を変更する二つのフィルター
get_lastpostmodified()関数は、内部で二つのフィルターを呼び出しています。
そしてフィルターの結果は、関数の実行結果として返されます。
デフォルトでは、これらのフィルターは使用されていません。
結果のフォーマットが異なる場合は、テーマやプラグインでフィルターが適用されているか確認してみてください。
■【WordPress】フィルターやアクションに登録されている関数をリストアップする方法
pre_get_lastpostmodifiedフィルター
一つ目は、pre_get_lastpostmodifiedフィルターです。
pre_get_lastpostmodifiedフィルター使用例
add_filter( 'pre_get_lastpostmodified' , function( $lastpostmodified, $timezone, $post_type ){
return $lastpostmodified;
},10,3);
このフィルターは、get_lastpostmodified()関数の一行目で実行されます。
そして結果がfalse以外のとき、関数の戻り値として返されます。
$lastpostmodifiedの初期値はfalseです。
$timezoneと$post_typeは、get_lastpostmodified()関数の引数をそのまま渡しています。
get_lastpostmodifiedフィルター
一つ目は、get_lastpostmodifiedフィルターです。
get_lastpostmodifiedフィルター使用例
add_filter( 'get_lastpostmodified' , function( $lastpostmodified, $timezone, $post_type ){
$lastpostmodified = (new DateTime( $lastpostmodified ))->format('Y年m月d日 H時i分s秒');
return $lastpostmodified;
},10,3);
このフィルターは、最終更新日をget_lastpostmodified()関数内で取得したあとに呼び出され、フィルターの結果が関数の戻り値として返されます。
$lastpostmodifiedの初期値は、Y-m-d H:i:s 形式です。
$timezoneと$post_typeは、get_lastpostmodified()関数の引数をそのまま渡しています。
他の形式に変換する方法
フィルターでget_lastpostmodified()の結果が変更されていないと仮定して、取得した最終更新日のフォーマット形式を変更してみます。
まずは、単純に取得した文字列を組み替える方法。
$lm = get_lastpostmodified();
echo substr($lm,0,4) . '年' . substr($lm,5,2) . '月'
. substr($lm,8,2) . '日 '
. substr($lm,11,2) . '時' . substr($lm,14,2) . '時'
. substr($lm,17,2) . '秒';
この例では日本語で、年月日をフォーマットしています。
これとは異なる形式に変更したい時は少し面倒ですが、そうでなければこれで十分です。
次は日付文字列からDateTimeオブジェクトを生成して、異なるフォーマットで出力します。
echo (new DateTime( $lm ))->format('Y年m月d日 H時i分s秒');
こちらはformatメソッドの引数を変更するだけで、他のフォーマットに変更できます。
汎用的なテーマやプラグインを作成するときは、こちらの方がよいかもしれませんね。
更新日:2022/12/20
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。