サポート » 使い方全般 » WP_Query を使った複数の条件下のループをまとめることはできますか?

  • こんにちは。いつもお世話になっております!

    カスタム投稿「AAA」のタクソノミ「BBB」のターム「CCC」から最新記事を3つ、
    カテゴリー「DDD」の投稿から最新記事を2つ、
    カテゴリー「EEE」の投稿から最新記事を1つ、

    というふうに複数の条件から決まった数の投稿を抜き出して表示させる場合
    (表示されるフォーマットは同じです)、WP_Queryを複数回書くしか方法はないでしょうか?

    以下のようなコードになってしまったのですが
    出力したいコードはどれも同じなのでなんとかループ部分をまとめられないかと調べていたのですがわかりませんでした・・・
    よい方法をご指南いただけると大変助かります。

    どうぞよろしくおねがいいたします。 m(_ _)m

    <?php
    $args = array(
    'post_type' => 'AAA',
    'tax_query' => array(
                array(
                    'taxonomy' => 'BBB',
                    'field' => 'slug',
                    'terms' => 'CCC'
                    )
                ),
    'posts_per_page' => '3'
     ); 
    
    $args2 = array(
    'post_type' => 'post',
    'tax_query' => array(
    'relation' => 'AND',
                array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => 'DDD'
                    )
                ),
    'posts_per_page' => '2'
     ); 
    
    $args3 = array(
    'post_type' => 'post',
    'tax_query' => array(
    'relation' => 'AND',
                array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => 'EEE'
                    )
                ),
    'posts_per_page' => '1'
     );
    $the_query = new WP_Query( $args ); ?>
    <?php  while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    出力したいコード
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?> 
    
    <?php $the_query = new WP_Query( $args2 ); ?>
    <?php  while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    出力したいコード
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?> 
    
    <?php $the_query = new WP_Query( $args3 ); ?>
    <?php  while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    出力したいコード
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    「出力したいコード」の部分を get_template_part で呼び出してはいかがでしょうか。

    Twenty Sixteen など、最近のデフォルトテーマは、コンテンツの表示部分を別ファイルとして共通化させていますので、参考にされるとよいかと思います。

    あと、WP_Queryなどの記述が重複するのが気になるのであれば、$args を配列とし、これを foreach でループして WP_Queryを配列の要素分実行させるようにすれば、WP_Query の記述自体も減らせます。
    このあたりは、後々のメンテナンス性などを鑑みて、わかりやすいようにしておくのが良いです。

    jim912様

    ご連絡ありがとうございます。(返信が遅れてすみません!)

    「出力したいコード」は実際ちょっと長いのでget_template_part を使いたいと思います。
    ありがとうございます!

    ただ、get_template_part を使ったとしても同じように3回呼び出す、というのは・・・と思っていたので
    (今回例として3パターンの繰り返しを書いたのですが実際は7パターンくらい呼び出すことになりそうです。。。)

    $argsall = $args + $args2

    みたいなことができたらなあと考えておりました。
    PHPに詳しくなくてお恥ずかしい限りなのですが・・・

    とりいそぎはお礼まで。お忙しい中ご連絡、情報のご提供ありがとうございます。
    もう少し情報収集しつつ様子をみてみたいと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「WP_Query を使った複数の条件下のループをまとめることはできますか?」には新たに返信することはできません。