• 解決済 san3san

    (@san3san)


    phpの基本的な知識に乏しく、応用がわからないので
    質問させてください。

    下記のような記述で配列を指定して、
    条件分岐によって配列の中身が異なるものを出力します。

    具体的には、特定のタームの記事一覧を、他のページで関連情報として、
    ページごとに異なるタームを指定して出力したいのです。

    
    //1つめのターム
    $args1 = array(
    	'post_type' => 'test',
    	'taxonomy' => 'test_category',
    	'term' => 'term1', //1つめのタームを指定
    	'posts_per_page' => -1
    );
    
    //2つめのターム
    $args2 = array(
    	'post_type' => 'test',
    	'taxonomy' => 'test_category',
    	'term' => 'term2', //2つめのタームを指定
    	'posts_per_page' => -1
    );
    
    //ページID1のときに1つめのターム記事一覧を出力
    <?php if ( is_single( '1' )): ?>
    	<?php
    		$wp_query = new WP_Query( $args1 ); //1つめの配列を指定
    		if (have_posts()) :while (have_posts()) :the_post();
     	?>	
    	内容省略
    
    //ページID2のときに2つめのターム記事一覧を出力
    <?php elseif ( is_single( '2' )): ?>
    	<?php
    		$wp_query = new WP_Query( $args2 ); //2つめの配列を指定
    		if (have_posts()) :while (have_posts()) :the_post();
     	?>	
    	内容省略
    

    上記の方法でとりあえず出力はできるのですが、
    実際にはこれを10回以上繰り返し記述する必要があります。

    もっとスマートにする方法があるのではと思い、質問させていただきました。

    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    投稿ページのスラッグ(または ID)とタームの配列を作成するのはどうでどうでしょう?

    例:

    $terms_table = array(
    	'1' => 'term1',
    	'2' => 'term2',
    );
    
    $args = array(
    	'post_type' => 'test',
    	'taxonomy' => 'test_category',
    	'posts_per_page' => -1
    );
    
    foreach ( $terms_table as $key => $value ) {
    	if ( is_single( $key ) ) {
    		$args['term'] = $value;
    		$query = new WP_Query( $args );
    		if ( $query->have_posts() ) {
    			while ( $query->have_posts() ): $query->the_post();
    
    				内容省略
    
    			}
    			wp_reset_postdata();
    		}
    	}
    }
    トピック投稿者 san3san

    (@san3san)

    ありがとうございます。

    教えていただいたソースそのままですと
    ループの閉じ方でエラーになってしまったのですが
    (他のソースと合わせたときの自分の記述がおかしかった可能性もあります)
    下記のようにして無事に動作しました。

    $terms_table = array(
    	'1' => 'term1',
    	'2' => 'term2',
    );
    
    $args = array(
    	'post_type' => 'test',
    	'taxonomy' => 'test_category',
    	'posts_per_page' => -1
    );
    
    foreach ( $terms_table as $key => $value ) {
    	if ( is_single( $key ) ) {
    		$args['term'] = $value;
    		$query = new WP_Query( $args );
    		
    		if ( $query->have_posts() ):
    			while ( $query->have_posts() ): $query->the_post();
    
    			//内容省略
    			
    		wp_reset_postdata();
    		endwhile; endif;
    	}
    }

    大変勉強になりました。
    どうもありがとうございました。

    • この返信は4年、 8ヶ月前にsan3sanが編集しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「条件分岐によって配列の一部を変えたい」には新たに返信することはできません。