2025年07月25日[金曜日]

条件を極める!WP_Query抽出条件の実践テクニック

  • 2025/07/23
  • BASICS
  • WordPressの基礎
  • 0comments
  • 39views
  • 約10分で読めます
  • 28

前回の記事では、WP_Queryの並び替え機能について学習し、投稿一覧の表示順序をコントロールする方法をマスターしました。今回は、WP_Queryの「抽出条件」について詳しく学習していきます。

抽出条件を自由に使いこなすことで、特定のカテゴリーの投稿のみを表示したり、特定の期間の投稿を絞り込んだりと、サイトのニーズに応じた柔軟な投稿一覧を作成できるようになります。

今回の目標

  • カテゴリー指定による投稿の絞り込み
  • 日付指定による投稿の絞り込み
  • 複数条件を組み合わせた高度な抽出

下準備

結果をわかりやすくするために投稿日を変更します。管理画面で以下のように投稿の日付を設定し直してください。

投稿日カテゴリータイトル
2025年07月15日新店舗新店舗オープンのお知らせ
2025年07月14日WEB/SNSSNS総フォロワー100人を達成しました
2025年07月13日イベントWordPress講習会開催のお知らせ
2025年07月12日休業夏季休暇のお知らせ
2025年07月12日WEB/SNSWebサイト解説のお知らせ
2025年07月11日未分類Hello world!

現状の条件

前回の記事で作成したpage-news.phpでは、以下のような抽出条件を使用しています。

$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'orderby'        => 'title',
    'order'          => 'asc',
];

現状の投稿の一覧

現在の設定では、すべての投稿がタイトルのアルファベット順(あいうえお順)で表示されています。

カテゴリー指定

特定のカテゴリーに属する投稿のみを抽出するには、category_nameまたはcatパラメータを使用します。

1つのカテゴリー

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',
];

この設定により、WEB/SNS(web-sns)とイベント(events)カテゴリーの投稿が表示されます。

カテゴリーIDなら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月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,
        ]
    ],
];

この設定により、2025年7月13日以降の投稿が表示されます。

inclusiveパラメータについて

  • '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日以前」という条件になります。

この設定により、指定期間内の投稿が表示されます。

inclusiveパラメータの使い分け

パターン1:開始日を含み、終了日を含まない

$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,
        ],
    ],
];

この設定により、2025年7月12日は含むが2025年7月14日は含まない投稿が表示されます。

パターン2:開始日を含まず、終了日を含む

$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,
        ],
    ],
];

この設定により、2025年7月12日は含まず2025年7月14日は含む投稿が表示されます。

複数条件の組み合わせ

カテゴリー指定と日付指定を組み合わせることで、より細かい条件で投稿を絞り込むことができます。

例: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)を使用してきました。

WordPressの正式な書式

[
    'year'  => 2025,
    'month' => 7,
    'day'   => 1,
]

この配列形式には以下のメリットがあります:

  • WordPressのコアで正式にサポートされている
  • 各要素を明確に指定できるため、意図が明確
  • 年、月、日を個別に指定できるため、柔軟な条件指定が可能

実用上許容される書式

Y-m-d形式('2025/07/01')も実用上は問題なく動作します。

'after' => '2025-07-13'
  • 文字列での指定が可能
  • コードが簡潔になり、可読性が向上
  • 実際の開発現場でもよく使われている

ただし、必ずbeforeafterと一緒に使う必要があります。

例えば

$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')は非推奨です。

  • 予期しない動作を引き起こす可能性がある
  • WordPressの公式ドキュメントでも推奨されていない

実践での選択指針

本格的な開発では正式な配列形式の使用を推奨しますが、学習段階や簡単なカスタマイズでは文字列形式も実用的な選択肢です。プロジェクトの要件や開発チームの方針に応じて適切な書式を選択してください。

まとめ

今回の記事では、WP_Queryの抽出条件について詳しく学習しました。重要なポイントをまとめると:

  • category_nameを使ったカテゴリー指定(スラッグで指定)
  • date_queryを使った日付による絞り込み
  • inclusiveパラメータによる日付の包含・除外制御
  • relationパラメータによる複数条件の論理演算
  • 複数条件の組み合わせによる高度な抽出

これらの抽出条件をマスターすることで、サイトの用途に応じた柔軟な投稿一覧を作成できるようになります。

次回予告

次回は、前回の並び替えと今回の抽出条件を組み合わせて、「カテゴリー順での並び替え」について詳しく解説します。

複数のカテゴリーが混在する投稿一覧を、カテゴリーごとにグループ化して表示する実践的なテクニックをお伝えしますので、お楽しみに!

成果物

この記事で作成した成果物は、以下のページでまとめて確認することができます。

成果物をまとめて確認する

この記事の評価をお願いします

評価をすると「既読」となり、まだ読んでいない記事を区別できます。

この投稿をシェアする

コメントを残す

CAPTCHA



順序をデザインする!WP_Query並び替えの実践テクニック

順序をデザインする!WP_Query並び替えの実践テクニック  BASICS

WP_Queryを使って投稿一覧を自由にカスタマイズできるようになったら、次に押さえておきたいのが「並び順の制御」です。今回はタイトル順やランダム表示、複数条件での並び替えなど、WP_Queryの並び替え機能を使った実践的なテクニックを解説します。

  • 2025/07/22
  • 0comments
  • 43views

カテゴリー順で並べる!WP_Query応用テクニック

カテゴリー順で並べる!WP_Query応用テクニック  BASICS

WordPressの標準機能では直接カテゴリー順に投稿を並べることができませんが、カテゴリー一覧を取得してループ処理を組み合わせることで実現できます。複数のカテゴリーを含む投稿一覧を、カテゴリー順に並べて表示する実践的なテクニックを詳しく解説します。

  • 2025/07/24
  • 0comments
  • 11views

STAY CONNECTED

wp-ch Admin

現役のフリーランスエンジニアがWordPressによるWebサイト構築を基礎から実践テクニックまで徹底解説します。

たくさんの方がフォローしてくれています。あなたもぜひ、情報を受け取ってください。

STORY|ストーリー

WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。

学習ストーリー第29話まで掲載中

全ストーリーを見る

TAGS|タグ