WordPressサイトでよく使われる処理として、記事の投稿日や更新日を表示するというものがあります。
イメージとしては以下のような感じで使われますね。
今回は、記事の投稿日や更新日を取得する処理について説明していきます。
現在記事の投稿日、更新日を取得する
投稿日、更新日は以下のようなコードで取得することが可能です。
<?php echo get_the_date('Y/m/d'); // 投稿日の取得 echo get_the_modified_date('Y/m/d'); // 更新日の取得 ?>
引数によって表示形式を変更することもできます。
今回のサンプルでは、「2019/08/21」のように表示したかったので、'Y/m/d'としています。
引数の設定については以下が詳しいので詳細はこちらで確認してください。
日付と時刻の書式 - WordPress Codex 日本語版
特定記事の投稿日、更新日を取得する
上記のサンプルだと、現在の記事の投稿日、更新日を取得しています。
特定の記事の投稿日、更新日を取得したい場合は、以下のように記事IDを指定すれば可能です。
get_the_date('Y/m/d', [記事ID]);
記事一覧ページなどで投稿日、更新日を取得する
また、記事一覧ページなどで日付を表示したい場合もあると思います。
以下のような感じですね。
その場合は、以下のようにループ中で get_the_date を使用すればよいです。
while (have_posts()) : the_post(); echo get_the_date('Y/m/d'); // 投稿日の取得 echo get_the_modified_date('Y/m/d'); // 更新日の取得 endwhile;
while (have_posts()) : the_post(); は一覧ページなどで使用される定型句で、これを使用すると現在の一覧ページでの記事を取得してループ処理を行うことができます。
例えば、10ページずつページ送りしているサイトで1ページ目の表示の際に上記の処理を行うと、1~10件目の記事を取得してループ処理することができます。
2ページ目なら、11~20件目を処理することができます。
要は、今表示している記事を処理できるということですね。
表示している記事ではなく、特定の記事群をループ処理したい場合は以下の処理で実施できます。
例えば、関連記事を出すような処理などですね。
foreach([特定の記事群] as $post): setup_postdata($post); echo get_the_date('Y/m/d'); // 投稿日の取得 echo get_the_modified_date('Y/m/d'); // 更新日の取得 endforeach; wp_reset_postdata(); // 現在の記事をリセット
記事群をforeachで1件ずつ処理していきます。
取得したものをsetup_postdata($post)を使用して、現在の記事に指定します。
そうすることで、記事IDを指定しなくても、foreachで取得した記事を処理できるのです。
ここで重要なのが$postを使用することです。
ここで$postを使用しないと、setup_postdataで現在の記事に指定することができません。
また、ループ処理が終わったら、必ずwp_reset_postdata()を実施しましょう。
これは、現在の記事をもとの設定に戻す処理です。
例えば、記事Aで処理を行っているとします。
その時に、setup_postdataで現在の記事を記事Bに設定したとします。
そのあと、記事Aの更新日を取得しようとして、get_the_dateを行うと記事Bの更新日が取得されてしまいます。
これは、現在の記事が記事Bになってしまっているからです。
こうした事態を回避するために、setup_postdataを使用したら、その後に必ずwp_reset_postdata()をセットで行うようにしましょう。