成果物をまとめて確認する
[成果物]条件を極める!WP_Query抽出条件の実践テクニック
【条件を極める!WP_Query抽出条件の実践テクニック】の成果物です。投稿の学びを終えた時点の構成を一覧でご確認いただけます。
前回の記事では、WP_Queryの並び替え機能について学習し、投稿一覧の表示順序をコントロールする方法をマスターしました。今回は、WP_Query
の「抽出条件」について詳しく学習していきます。
抽出条件を自由に使いこなすことで、特定のカテゴリーの投稿のみを表示したり、特定の期間の投稿を絞り込んだりと、サイトのニーズに応じた柔軟な投稿一覧を作成できるようになります。
今回の目標
目次
結果をわかりやすくするために投稿日を変更します。管理画面で以下のように投稿の日付を設定し直してください。
投稿日 | カテゴリー | タイトル |
---|---|---|
2025年07月15日 | 新店舗 | 新店舗オープンのお知らせ |
2025年07月14日 | WEB/SNS | SNS総フォロワー100人を達成しました |
2025年07月13日 | イベント | WordPress講習会開催のお知らせ |
2025年07月12日 | 休業 | 夏季休暇のお知らせ |
2025年07月12日 | WEB/SNS | Webサイト解説のお知らせ |
2025年07月11日 | 未分類 | Hello world! |
前回の記事で作成したpage-news.phpでは、以下のような抽出条件を使用しています。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
];
特定のカテゴリーに属する投稿のみを抽出するには、category_name
またはcat
パラメータを使用します。
WEB/SNSカテゴリー(スラッグ:web-sns
)の投稿のみを抽出してみましょう。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'category_name' => 'web-sns',
];
ポイント category_name
にはカテゴリーのスラッグを指定します。カテゴリー名ではないので注意してください。
複数のカテゴリーの投稿を同時に抽出したい場合は、スラッグをカンマで区切って指定します。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'category_name' => 'web-sns,events',
];
category__in
パラメータも使用できます。$category_ids = [2, 3]; // 抽出したいカテゴリーIDを配列で定義
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'category__in' => $category_ids,
];
ポイント category_name
はカンマ区切りの文字列で指定しますが、category__in
では配列で指定できるため、変数化してコードを再利用しやすくなります。
ID指定の注意点
サンプルコードのようにプログラムでIDを直接指定する方法は、避けてください。開発環境から本番環境へ移行した時などIDが変更になる可能性があります。プログラムでカテゴリーIDを取得して、そのIDをcategory__in
の指定する場合などに使用してください。
投稿日による絞り込みにはdate_query
パラメータを使用します。
2025年7月12日の投稿のみを抽出してみましょう。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
[
'year' => 2025,
'month' => 7,
'day' => 12,
]
],
];
2025年7月13日以降の投稿を抽出したい場合は、after
パラメータを使用します。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
[
'after' => [
'year' => 2025,
'month' => 7,
'day' => 13,
],
'inclusive' => true,
]
],
];
'inclusive' => true
:指定した日付を含む(2025年7月13日も対象に含まれる)'inclusive' => false
:指定した日付を含まない(2025年7月14日以降が対象)false
がデフォルトになります2025年7月12日以降、2025年7月14日以前の投稿を抽出してみましょう(両端を含む)。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
'relation' => 'AND',
[
'after' => [
'year' => 2025,
'month' => 7,
'day' => 12,
],
'inclusive' => true,
],
[
'before' => [
'year' => 2025,
'month' => 7,
'day' => 14,
],
'inclusive' => true,
],
],
];
relationパラメータについて: 複数の日付条件を指定する場合に使用します。
'relation' => 'AND'
:すべての条件を満たす(かつ)'relation' => 'OR'
:いずれかの条件を満たす(または)'AND'
がデフォルトになります上記の例では、「2025年7月12日以降 かつ 2025年7月14日以前」という条件になります。
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
'relation' => 'AND',
[
'after' => [
'year' => 2025,
'month' => 7,
'day' => 12,
],
'inclusive' => true,
],
[
'before' => [
'year' => 2025,
'month' => 7,
'day' => 14,
],
'inclusive' => false,
],
],
];
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
'relation' => 'AND',
[
'after' => [
'year' => 2025,
'month' => 7,
'day' => 12,
],
'inclusive' => false,
],
[
'before' => [
'year' => 2025,
'month' => 7,
'day' => 14,
],
'inclusive' => true,
],
],
];
カテゴリー指定と日付指定を組み合わせることで、より細かい条件で投稿を絞り込むことができます。
例:WEB/SNSカテゴリーで、2025年7月13日以降の投稿
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'category_name' => 'web-sns',
'date_query' => [
[
'after' => [
'year' => 2025,
'month' => 7,
'day' => 13,
],
'inclusive' => true,
]
],
];
この記事では、WordPressの正式な配列形式(year
, month
, day
)を使用してきました。
[
'year' => 2025,
'month' => 7,
'day' => 1,
]
この配列形式には以下のメリットがあります:
Y-m-d
形式('2025/07/01'
)も実用上は問題なく動作します。
'after' => '2025-07-13'
ただし、必ずbefore
/after
と一緒に使う必要があります。
例えば
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
[
'year' => 2025,
'month' => 7,
'day' => 12,
]
],
];
このコードを2025-07-12
形式にすると
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'asc',
'date_query' => [
[
'after' => '2025-07-12'
'inclusive' => true,
],
[
'before' => '2025-07-12'
'inclusive' => true,
],
],
];
となります。場面によってはコードを簡潔にするつもりが、かえって複雑になることもあります。
Y/m/d
形式('2025/07/01'
)は非推奨です。
本格的な開発では正式な配列形式の使用を推奨しますが、学習段階や簡単なカスタマイズでは文字列形式も実用的な選択肢です。プロジェクトの要件や開発チームの方針に応じて適切な書式を選択してください。
今回の記事では、WP_Query
の抽出条件について詳しく学習しました。重要なポイントをまとめると:
category_name
を使ったカテゴリー指定(スラッグで指定)date_query
を使った日付による絞り込みinclusive
パラメータによる日付の包含・除外制御relation
パラメータによる複数条件の論理演算これらの抽出条件をマスターすることで、サイトの用途に応じた柔軟な投稿一覧を作成できるようになります。
次回は、前回の並び替えと今回の抽出条件を組み合わせて、「カテゴリー順での並び替え」について詳しく解説します。
複数のカテゴリーが混在する投稿一覧を、カテゴリーごとにグループ化して表示する実践的なテクニックをお伝えしますので、お楽しみに!
この記事で作成した成果物は、以下のページでまとめて確認することができます。
WP_Queryを使って投稿一覧を自由にカスタマイズできるようになったら、次に押さえておきたいのが「並び順の制御」です。今回はタイトル順やランダム表示、複数条件での並び替えなど、WP_Queryの並び替え機能を使った実践的なテクニックを解説します。
WordPressの標準機能では直接カテゴリー順に投稿を並べることができませんが、カテゴリー一覧を取得してループ処理を組み合わせることで実現できます。複数のカテゴリーを含む投稿一覧を、カテゴリー順に並べて表示する実践的なテクニックを詳しく解説します。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第29話まで掲載中