*

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
【WordPress】テーマ「Stinger3」のスマホページでCSSが効かない

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

WordPressで突然ace_where,ace_joinに関するエラーが出てサイトが崩壊した話

先日私が管理している WordPress サイトの一つを見た時、いつもと違う印象を受けました。サイトデザインも崩れていますし、投稿内容もおかしな事になっていました。突然サイトが自分の意図しない物になっていたら焦ります。 […]

Stingerで特定記事だけAdsenseを表示しないようにする

このブログでも使っている WordPress の人気テーマ Stinger3 で Adsense を表示しないようにする方法を紹介します。Stinger5 でも同様です。 目次1 Adsenseを非表示にする必要性2 S […]

Stinger6
【STINGER6】トップページのtitleタグから-(ハイフン)を除去する

WordPress の人気テーマの STINGER シリーズから最新の STINGER6 が公開されました。公式サイトより無料でダウンロードできます。 全てはブログを書く為に。 – WordPress無料テー […]

著者について

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

フォローはこちら

       

       
Twitter公式Web版で複数アカウントの切り替えに対応!既存アカウントの追加方法

Twitter をいつもお使いであれば、複数アカウントを運用し

同じ車種でもグレードやタイプによって燃費が異なるのは何故か?

ガソリンが高い時代ですからやはり車の燃費は良い方がいいですよね

札幌円山のストウブ・スキレット料理の「インゾーネテーブル」でランチ

札幌の南円山にインテリアショップ「inZONE」がプロデュース

札幌エスタ10階にできたふわふわかき氷専門店「えぞうさぎ」札幌駅直結!

札幌駅からすぐ近くのエスタ10階にかき氷専門店「えぞうさぎ」が

新千歳空港で早朝7時から朝ごはんが食べられるカフェやレストラン

新千歳空港で飛行機の早朝便は早くて7時30分の飛行機があります。早朝便

→もっと見る