WEB制作

WP_Queryを極める!複雑な条件設定でコンテンツ表示を思いのままに

WordPressのカスタマイズに欠かせない「WP_Query」。シンプルな使い方は知っていても、複数の投稿タイプを扱ったり、カスタムフィールドでの絞り込み、日時での並び替えなど、少し複雑な条件での使い方に挑戦すると、途端にややこしく感じることもありますよね?

この記事では、WP_Queryの中でも少し高度なパターンにフォーカスして解説します。複数の投稿タイプを指定して過去1ヶ月間の投稿を取得したり、カスタムフィールドでの絞り込みや並び替えをする方法など、実際の現場で役立つ具体的な使い方を紹介します。

1. 基本のWP_Queryとは?

WP_Queryは、WordPressの投稿データをカスタマイズして取得するためのクラスです。通常のブログ投稿はもちろん、カスタム投稿や特定のカテゴリーの記事だけを表示するのにも使えます。

$args = array(
  'post_type' => 'post', // 投稿タイプを指定
  'posts_per_page' => 5, // 1ページあたりの表示件数
);
$query = new WP_Query( $args );

このように、$argsで取得するデータを指定して、WP_Queryを使ってカスタムした表示ができます。

2. 複数の投稿タイプを指定して、過去1ヶ月間の投稿を取得する

複数の投稿タイプ(例:通常の投稿「post」とカスタム投稿「custom_post」)を取得しつつ、過去1ヶ月間に公開されたものだけを表示させたい場合、post_typeと日付条件を組み合わせます。

$args = array(
  'post_type' => array('post', 'custom_post'), // 複数の投稿タイプを指定
  'date_query' => array(
    array(
      'after' => '1 month ago', // 過去1ヶ月の投稿を取得
      'inclusive' => true, // 境界日も含める
    ),
  ),
  'posts_per_page' => 10, // 1ページあたりの表示件数
);
$query = new WP_Query( $args );

このコードでは、「投稿」と「カスタム投稿タイプ」両方の過去1ヶ月分の投稿をまとめて取得できます。'after' => '1 month ago'を使うことで、柔軟に日付フィルターを設定できます。

3. カスタムフィールドの複数条件でフィルタリング

例えば、投稿に関連付けられたカスタムフィールド「イベント日付」と「地域」を条件に絞り込みたい場合は、meta_queryをネストして使います。

$args = array(
  'meta_query' => array(
    'relation' => 'AND', // 両方の条件を満たす
    array(
      'key' => 'event_date',
      'value' => date('Ymd'), // 今日の日付
      'compare' => '>=', // 今日以降のイベント
      'type' => 'DATE' // 日付型
    ),
    array(
      'key' => 'event_location',
      'value' => 'Tokyo', // 地域を「東京」に絞り込み
      'compare' => '='
    )
  ),
  'posts_per_page' => 5, // 表示する投稿数
);
$query = new WP_Query( $args );

この例では、今日以降に開催される東京でのイベントだけを取得します。meta_queryで複数のカスタムフィールドを使った複雑な条件付けができるのが強みです。

4. カスタムフィールドの日時で並び替える

カスタムフィールドで管理している日付や日時を元に並び替えたい場合は、orderbymeta_valueを指定し、meta_keyでどのフィールドを基準にするかを指定します。例えば、カスタムフィールド「イベント日時」で昇順に並び替えます。

$args = array(
  'post_type' => 'event', // イベント投稿タイプ
  'meta_key' => 'event_datetime', // 日時を格納するカスタムフィールド
  'orderby' => 'meta_value', // カスタムフィールドの値で並び替え
  'order' => 'ASC', // 昇順(古い順)
  'posts_per_page' => 10, // 表示件数
);
$query = new WP_Query( $args );

このコードは、日時形式のカスタムフィールドを基に古い順に並べて表示します。イベントやセミナー情報など、日時の管理が重要な場合に非常に便利です。

5. 投稿タイプやタクソノミーの複雑な絞り込み

投稿タイプを複数指定しつつ、タクソノミー(カテゴリーやタグなど)でもフィルタリングするケースもよくあります。例えば、特定のカテゴリーの中から、複数の投稿タイプの投稿を取得する方法です。

$args = array(
  'post_type' => array('post', 'portfolio'), // 複数の投稿タイプ
  'tax_query' => array(
    array(
      'taxonomy' => 'category', // タクソノミーを指定
      'field' => 'slug',
      'terms' => array('design', 'web'), // カテゴリー「design」と「web」に絞り込み
    ),
  ),
  'posts_per_page' => 8, // 表示件数
);
$query = new WP_Query( $args );

この例では、「投稿」や「ポートフォリオ」投稿タイプの中から、特定のカテゴリー「design」や「web」に属するものだけを取得しています。

まとめ

WP_Queryはシンプルなパターンから複雑な条件まで、非常に柔軟なカスタマイズが可能です。複数の投稿タイプやカスタムフィールド、タクソノミーを使った絞り込みなど、自由度の高い表示を実現できます。複雑なパターンもマスターすれば、よりリッチなWordPressサイトが作れるようになるでしょう!