*

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 の各記事に検索キーワードを設定する事はできないだろうか?とふと思いました。通販サイトなどでは商品説明とは別に検索キーワードが個別に設定できるものです。これが WordPress でできないだろうかと。 […]

WordPressメディアライブラリ
WordPressでメディアライブラリの画像を検索しやすくする為にすべき事

WordPress でサイトやブログを運営していると記事数もさることながら、使用している画像もかなりの数にのぼると思います。WordPress のメディアライブラリには相当な枚数の画像が格納されているでしょう。 ある時、 […]

WordPressでリンク元によってデザインを変える、phpでリンク先に変数を送る方法

ちょっと変わったケースの依頼で1つの WordPress に2つのサイトを共存させ、一部ページは2つのサイトで共通に使いたいというものがありました。ようするに1つの WordPress 管理画面で2つのサイトを管理したい […]

wordpress
【WordPress】テーマ「Stinger3」のスマホページでCSSが効かない

WordPress のテーマで Stinger3 というものがあります。これが結構人気テーマで、このブログでも使わせて頂いています。 「必要な物は、揃っている。」というキャッチコピーの通り、主要プラグインに類する機能、ス […]

ダウンロードモニター
WordPressのDownload Monitorでショートコードを使わずにダウンロード数をページに表示する

WordPress のプラグインに「Download Monitor(ダウンロードモニター)」というファイルのダウンロード数をカウントできるものがあります。登録したファイルがどれだけダウンロードされたのか、いつダウンロー […]

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

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

著者について

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

フォローはこちら

       

       
Photoshopで写真の黄ばみや赤みを補正し抑える方法

デジカメで撮った写真が思ったより黄色かったという経験はありませ

簡単にPCのデスクトップキャプチャーができるソフト「FonePaw PC画面録画」のレビュー

パソコンの画面を録画するにはどうすればいいの? ウ

ホンダ純正Gathersドライブレコーダーでブザーが止まらない時の対処方法

近年煽り運転のニュースが世間を賑わせている中、ドライブレコーダ

Youtubeの動画でアンケートに回答するにはどうやるの?

いわゆる動画サイトには視聴者の方に意見を問うアンケート機能とい

初期化しても復元できるデータ復元ソフト「EaseUS Data Recovery Wizard」の使い方

パソコンならデータが消える事はない。そう思っているあなた、パソ

→もっと見る