「WordPressで全投稿(投稿タイプごと)の最終更新日を取得、表示したい」
こんな悩みにお答えします。
WordPressで投稿の最終更新日を取得する関数は無いようなので、関数を自作していきます。
投稿名(カスタム投稿名)を指定し、新しい更新日順に並べ替えをし、いちばん最初にくる投稿の更新日が全投稿の最終更新日になります。
この記事はある程度WordPressのテンプレートなどがさわれる人向けです。
私は、2015年頃からWeb制作の仕事をはじめて、170件ほどのWebサイトを制作してきました。
その間、いろいろな失敗を繰り返し、クライアントからのフィードバックや本などで勉強することにより、多くのノウハウを得ることができました。
- 目次
WordPressで全投稿の最終更新日を取得、表示する関数
一般的なブログやお知らせのような用途ではあまり必要がないと思います。
商品データベースのような使い方をしている場合は、日常的に商品情報を追加したり更新したりするので、あると便利な関数だと思いますが、WordPressの機能にはなかったので自作してみました。
取得
このコードをfunctions.phpに貼り付けます。
デフォルトで「投稿(post)」を取得し、日付フォーマットは「Y-m-d H:i:s」で表示されるようにしています。
//全投稿の最終更新日 function all_modified_date( $post_type = "post", $format = "Y-m-d H:i:s" ){ $all_modified_date = ""; $args["post_type"] = $post_type; $args["orderby"] = "modified"; $args["order"] = "DESC"; $args["posts_per_page"] = 1; $query = new WP_Query( $args ); if ($query->have_posts()): while ($query->have_posts()): $query->the_post(); $all_modified_date = get_the_modified_date( $format ); endwhile; wp_reset_postdata(); else: $all_modified_date = "投稿がありません"; endif; return $all_modified_date; }
表示
テンプレートファイルの表示したい場所で以下の関数を貼り付けます。
必要におうじて、引数を指定します。
// 投稿 ※デフォルトなので引数不要 echo all_modified_date(); // 固定ページ echo all_modified_date("page"); // カスタム投稿「blog」、表示形式指定 echo all_modified_date("blog","Y年m月d日");
解説
前項で自作した関数で使用した機能などを解説します。
取得
関数、引数のデフォルト値を定義する
以下のように関数を定義します。
「all_modified_date」は関数名でどんな名前にしてもかまいません。
ただし、サイト内で重複してはいけません。
カッコ内(引数)に、$post_type , $format を定義します。
デフォルト値として、$post_typeには「post」(投稿)、$formatには表示するときの形式を指定しています。
最後に「$all_modified_date」を指定した値を出力します。
function all_modified_date( $post_type = "post", $format = "Y-m-d H:i:s" ){ //ここに実際の処理を書く return $all_modified_date; }
WP_Queryの条件設定
関数内で指定した投稿を取得します。
まずは、取得するための条件設定をします。
- $args["post_type"] = $post_type; … 投稿タイプを設定(引数でデフォルトはpost)
- $args["orderby"] = "modified"; … 更新日で並び替える
- $args["order"] = "DESC"; … 降順(いちばん新しい投稿が最初に取得)
- $args["posts_per_page"] = 1; … 1件だけ取得
これだけ設定することで、投稿タイプ「post」を更新日で並び替え、いちばん新しい1件だけを取得することになります。
この1件の更新日が全投稿の最終更新日となります。
$args["post_type"] = $post_type; $args["orderby"] = "modified"; $args["order"] = "DESC"; $args["posts_per_page"] = 1;
以下の書き方でも同じです。
$args = array( post_type => $post_type, orderby => "modified", order => "DESC", posts_per_page => 1 );
実際のコードにまとまっているので、以下のサイトのほうが見やすいこともあります。
WP_Queryのループ
条件設定した内容で投稿を取得します。
条件に一致した投稿が複数あればループして同じ内容を取得しますが、この関数では1件だけなので実際にはループはしません。
$query = new WP_Query( $args ); if ($query->have_posts()): while ($query->have_posts()): $query->the_post(); //ここに実際の処理を書く endwhile; wp_reset_postdata(); else: $all_modified_date = "投稿がありません"; endif;
更新日を取得
テンプレートタグのget_the_modified_date()で、更新日を取得します。
$all_modified_date = get_the_modified_date( $format );
表示
関数の出力が echo ではなく、return なので、テンプレートファイルに書くときは echo を書く必要があります。
echo all_modified_date();
引数:投稿タイプ
デフォルトの投稿タイプは「post」です。
固定ページ「page」やカスタム投稿「(任意)」を指定する場合は、その投稿タイプ名スラッグを指定します。
// 投稿 ※デフォルトなので引数不要 echo all_modified_date(); // 固定ページ echo all_modified_date("page"); // カスタム投稿「blog」、表示形式指定 echo all_modified_date("blog","Y年m月d日");
投稿タイプについては以下サイトを参照してください。
引数:日付フォーマット
テンプレートタグのget_the_modified_date()で、更新日を取得します。
- Y-m-d H:i:s … 2022-07-03 14:27:37
- Y-m-d … 2022-07-03
- Y年m月d日 … 2022年07月03日
- y-n-j … 22-7-3
詳しいフォーマットの指定方法は以下サイトを参照してください。
まとめ
WordPressで投稿タイプごとの最終更新日を取得、表示する方法を解説しました。
想定される用途は商品データベースなどでそんなによく使う機能では無いと思いますが、必要な場合はコピペするなり、参考にアレンジするなり自由に使ってください。