2026年6月21日

2026年6月21日

WordPressのwp_queryを使って記事を条件指定で取得する方法

はじめに

WordPressのカスタム投稿システムは非常に柔軟性が高く、テーマやプラグイン開発において重要な役割を果たします。その中でも特に重要な機能がwp_queryです。この記事では、wp_queryを使用して特定の条件で記事を取得する方法について詳しく解説します。

症状・背景

wp_queryが必要になる主な場面:

  • カスタムページテンプレートを作成し、特定のカテゴリーまたはタグに基づいて記事を表示させる必要がある場合
  • フィルター機能や検索機能を実装する際に必要な条件で記事を取得したい場合
  • テーマやプラグイン内でカスタムクエリを使用してデータを操作したい場合

手順・設定方法

ステップ1: 基本的なwp_queryの利用

# WordPressの初期化処理を終えてからwp_queryを使用するため、is_main_query()関数を使ってメインクエリであることを確認します。
if ( ! $query->is_main_query() ) {
    return;
}

# 必要なパラメータを指定してwp_queryオブジェクトを作成
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
);
$query = new WP_Query( $args );

# 取得した記事のループ処理を行う
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // 記事の表示処理
    }
}
// ループ終了後、wp_reset_postdata(); を呼んで投稿情報の初期化を行う

ステップ2: 主要なオプション/設定

# カスタムフィールドを使用した条件指定
$args = array(
    'meta_key' => 'my_custom_field',
    'meta_value' => 'value_to_search',
);

# 複数のカテゴリーを指定する場合
$categories = get_terms( 'category', array( 'slug' => array('news','tech') ) );
$category_ids = [];
foreach ( $categories as $cat ) {
    $category_ids[] = $cat->term_id;
}
$args['category__in'] = $category_ids;

# 日付範囲で記事を取得する
$date_args = array(
    'date_query' => array(
        array(
            'after'     => '1 month ago',
            'before'    => 'now'
        ),
    ),
);

ステップ3: 応用例/組み合わせ

# カスタム投稿タイプとカスタムタクソノミーを指定する
$args = array(
    'post_type' => 'product',
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array('electronics', 'gadgets'),
        ),
    ),
);

# 降順にソート
$args['orderby'] = 'date';
$args['order'] = 'DESC';

# 複数の投稿ステータスを指定する
$args['post_status'] = array( 'publish', 'future' );

ステップ4: 実践的な例/トラブルシュート

# 任意のカスタムフィルターを使用してデータを取得する
function custom_query_filter($query) {
    if ( $query->is_main_query() && is_page('custom-page') ) {
        $query->set( 'meta_key', 'featured' );
        $query->set( 'orderby', array( 'meta_value_num' => 'DESC' ) );
    }
}
add_action( 'pre_get_posts', 'custom_query_filter' );

注意事項

  • wp_reset_postdata(); を忘れずに呼び出し、投稿情報の初期化を行ってください。
  • 複雑なクエリを実装する際にはパフォーマンスに影響を与えないよう注意してください。必要であれば、データベースインデックスを適切に設定することも検討しましょう。
  • セキュリティ上の観点から、ユーザーからの入力値を使用してクエリを作成する場合は必ずエスケープ処理を行ってください。
  • パフォーマンス/運用上の注意: 高負荷の状況下では、WP_Queryの使用は適切にキャッシュを活用することで効果的にパフォーマンスを向上させることができます。

まとめ

1. 基本的な利用: wp_queryを使用して、特定の条件に基づいて記事や投稿情報を取得できます。

2. カスタムフィールドの使用: カスタムフィールドを使用することで、より細かいレベルでの検索が可能になります。

3. 日付範囲指定: 記事を公開された日時によって絞り込むことができます。

4. 降順ソート: 取得したデータを新しいものから古いものへと並べ替えることが可能です。

5. カスタムフィルターの追加: pre_get_postsアクションフックを使用して、特定ページや投稿タイプに対する独自のクエリ設定を行えます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ