【WordPress】カスタムフィールドの日付項目で並び替え・期間指定して記事を取得

こんにちは。スタッフのユースケです。

WordPressにはカスタムフィールドという、タイトルや本文とは別に個別の項目を持つことが出来る仕組みがあります。
よくあるのが、記事に公開日とは別の日付項目を設けたい時などに、カスタムフィールドで項目を設けます。(例:開催日)
そして、開催日などを設けると、記事を開催日順に表示したいというニーズは必ず出てきますよね。
そんな時に使える小技を今日は紹介します!

取得したい記事の並び順を変えるには、記事取得時のQueryパラメータを指定してあげればOKです。
下記のサンプルは、記事をカスタムフィールドの「開催日」降順で取得しています。

$my_query = new WP_Query(array(
    'posts_per_page' => -1,
    'order' => 'DESC',
    'meta_key'=>'開催日',
    'orderby'=>'meta_value',
));

ポイントは3つ。
・order : ASC(昇順)、DESC(降順)を指定
・meta_key : カスタムフィールドの項目名を指定
・orderby : 「meta_value」を指定することで、記事のメタ情報(カスタムフィールドなど)での並び替えが可能になります。
        ここには他にも指定できるキーワードがあるので、Codexなどで調べてみてください。

これだけです。簡単ですよね?便利です、WordPress。

その他に偶にあるのが、掲載期間をカスタムフィールドに持たせて期間内の記事のみ表示させるというケース。
これも先ほどのQueryパラメータで解決できます!
下記サンプルです。

$my_query = new WP_Query(array(
    'posts_per_page' => -1,
    'order' => 'DESC',
    'meta_key'=>'開催日',
    'orderby'=>'meta_value',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => '掲載開始日',
            'value' => date('Y/m/d'),
            'compare' => '<=',
            'type' => 'DATE'
        ),
        array(
            'key' => '掲載終了日',
            'value' => date('Y/m/d'),
            'compare' => '>=',
            'type' => 'DATE'
        )
    )
));

先ほどのサンプルに「meta_query」というパラメータを加えています。
このパラメータはカスタムフィールドの絞り込み条件を指定するもので、サンプルでは「掲載開始日」と「掲載終了日」を現在日付と比較して絞り込みを行っています。

ポイントは条件指定の連想配列です。
・relation : 「AND」か「OR」を指定。複数条件で絞り込む際に使用。
・key : 絞り込む項目。
・value : 絞り込む値。
・compare : 値の比較方法。他に「=」や「LIKE」など、SQLの条件指定が使用可能。
・type : データ型を指定。「NUMERIC」や「CHAR」など。

これで、期間指定で記事を取得できます!
ただ注意点が1つあり、便利だからと複雑な条件指定をしてしまうと、データベースの検索処理に時間がかかってしまうので多用は禁物です。

如何でしたか?
ブログ記事は公開日順で、イベントのお知らせは開催日順でなど、ケースによって使い分けてみてくださいねー。