*

WordPressのWP_Queryでカスタムフィールドで絞り込み今日の日付以前の記事は表示しない

公開日: : 最終更新日:2019/02/21 WordPress

WordPress で条件に応じた記事を一覧で表示したいという機会は数多くあります。WP_Query を使えばカテゴリで記事を絞り込んだり、並び替えたり色々な条件に応じた記事一覧を出力できます。

今回やりたいと思ったのはカスタムフィールド(日付)の値で記事を絞り込んで出力できるのか?という事でした。更に出力した記事をカスタムフィールドの値で並び替えもしたい、今日の日付以前の記事は表示したくないという複雑な要件です。

結論から言えば WP_Query を使って実現する事ができました。

実装したい機能

  • イベント情報を掲載しているウェブサイトを作っていてイベントの一覧を表示したい
  • 開催日を過ぎたイベント記事は表示したくない
  • 開催日が近い記事から表示したい

実装したい機能はこのような事で、直近のイベント情報という形で記事を絞り込んで表示する機能を作りたいと思っていました。

イベント開催日を過ぎた記事を手動で消すのは面倒ですので自動でやりたいと思います。

作り方

まず開催日となるデータを php で扱えるようにしなくてはいけません。その為にはカスタムフィールドで開催日のデータを作りました。

新しいカスタムフィールド「eventdate」を作り、スラッシュで区切って年月日を記入します。月と日も2桁にします。

ここから php プログラムを組んでいきます。

$today = date("Y/m/d");

まずは今日の日付も絞り込み条件に使うので、変数に今日の日付も入れておきます。

次に WP_Query で絞り込む条件を作成します。ここが一番大事な所です。

$args = Array(
   'post_type' => 'post',
   'category_name' => 'event',
   'posts_per_page' => 10,
   'orderby' => 'meta_value',
   'order' => 'ASC',
   'meta_query' => array(array(
                      'key' => 'eventdate',
                      'value' => $today,
                      'compare' => '>=',
                      'type' => 'DATE'
                   ))
 );

大変複雑な条件指定になりましたが、一個一個見ていきましょう。

post_type

これは投稿のタイプです。

  • post:投稿記事
  • page:固定ページ

主に使うのはこの2つだと思います。今回は記事を表示したいので post にしています。

category_name

これはカテゴリーの名前です。カテゴリで絞り込みたい時に使います。カテゴリースラッグを記入します。

スラッグとはカテゴリーページの URL となる部分で、カテゴリーの設定画面にあります。

posts_per_page

これはいくつ記事を表示するかという値です。全部表示する時は -1 を書きます。

orderby

これは一覧に表示する記事について何を基準に並び替えするかというものです。

タイトル、日付、更新日など色々な条件で並び替えができますが、meta_value はカスタムフィールドの値で並び替えを行います。

order

これは並び替えを降順にするか昇順にするか指定します。

  • ASC:昇順
  • DSC:降順

開催日が近いものから表示したいので昇順にしています。

meta_query

これはカスタムフィールドを指定したりどんな条件で絞り込むか詳細な条件を設定します。

  • key:絞り込みに使うカスタムフィールド名を指定
  • value:カスタムフィールドを何と比較するか。今回は今日の日付と比較します
  • compare:比較する条件(~より大きい、~より小さい、~と等しい)
  • type:日付で絞り込む場合は DATE 指定が必須です

カスタムフィールド(開催日)と今日の日付を比較し、開催日の方が大きければ(今日の日付より先であれば)表示するという条件になります。compare の比較条件に「>=」を指定していますが、数式風にすればこんな感じです。

開催日 >= 今日の日付

年月日を分解して数値で比較しなくても「2019/02/20」のまま比較ができちゃいます。これは簡単で助かります。

これで開催日が過ぎたものに関しては自動で表示されなくなります。

$querys = new WP_Query($args);
   if($querys -> have_posts()):
      while($querys -> have_posts()): $querys -> the_post();
         (この中に出力する処理を書く)
      endwhile;
   endif;
wp_reset_postdata();

これが絞り込んだ記事を出力する部分です。出力する処理には ul リストで出力したり書き方次第でお好きな形式で出力できます。

おわりに

以上で求めていた機能が実装できました。php でどうやって組むのか悩んでいましたが、WordPress のクラスで用意されているパラメーターだけで目的の機能が実装できました。WP_query は凄く優秀ですね。

  • Pocket

おすすめトピックス

関連記事

wordpressサイト高速化
【WordPress】画像を最適化でサーバー容量削減!「EWWW image optimizer」が便利すぎ

遅いサイトと速いサイト、どっちが良いですか?と聞かれたら、それは多分速いサイトと答える人が圧倒的なのではないかと思います。ウェブサイトを見る人にとっても検索ロボット(クローラー)にとってもね。 サイトを表示するまでの早さ […]

WordPressのパーマリンクに%E2%80%8B%E2%80%8が混入する原因と正体

WordPress のパーマリンクに不可解な文字列「%E2%80%8B%E2%80%8」が混入するという現象が発生しました。 パーマリンクとは上図のやつですよ。ようするに投稿記事の URL です。WordPress 管理 […]

WordPressで記事ごとにページビュー(アクセス数)を表示する方法

WordPress でブログやサイトを運営していると、どの記事がどの程度読まれているのか?という事が気になってくるものでしょう。それを調べる為にはアクセス解析や Google Analytics といったようなツールを利 […]

WordPress管理画面の投稿一覧で表示される投稿数を変更するには

WordPress の管理画面と言えば、WordPress でブログやサイトを運営しているなら必ず目にするものですが、投稿一覧に表示される記事の数を変更する必要がありました。普通にブログを書くだけなら、投稿一覧の記事数な […]

WordPress管理画面の固定ページの属性の中にテンプレートが表示されないのは何故?

WordPress の固定ページの新規作成画面にテンプレートのドロップダウンメニューがない事に気が付きました。固定ページのテンプレートとは、固定ページに独自のデザインを適用するためのものです。WordPress をカスタ […]

全記事一覧
WordPressで全記事一覧と投稿日を一緒に出力する方法

WordPress を使う前は Movable Type や Serene Bach を使用しておりましたが、その時は対して苦労しなかった「全記事一覧と投稿日を一緒に出力する」事が WordPress では結構実現に手間 […]

著者について

名前:Azell
作曲したり風景写真撮ったりWeb制作したりする人です。 好きな事を楽しくブログに綴れていけたらと思います。

フォローはこちら

       

       
ESRランニングポーチ
ランニング中でもスマホが邪魔にならないESRランニングポーチのレビュー

日々のランニングやマラソン大会に出た時、ある悩みの種がありまし

はじめ整体院外観
滋賀県彦根市の「はじめ整体院」で体の歪みや重心のズレを相談してきた

近頃長い間歩くと足の痛みや足の不調が顕著に現れるようになってき

青森大間土産のマグロ一本釣り「やいっやー!山本さんラングドシャ」

お隣さんが本州最北端の青森県大間町へ旅行に行ったという事でお土

増田うどん
札幌の「増田うどん」甘いお出汁の肉うどんが魅力のうどん専門店

札幌市中央区役所の近くにある「増田うどん」は福岡肉うどんがメイ

鮭の旨味が濃厚な柳月のお煎餅「北海道鮭ぶし丸」が安いし超うまい

北海道で近年「鮭節(さけぶし)」と呼ばれる新食材が注目されてい

→もっと見る