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. カスタムフィールドの日時で並び替える
カスタムフィールドで管理している日付や日時を元に並び替えたい場合は、orderby
にmeta_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サイトが作れるようになるでしょう!