こんにちは
WP_Query の post__not_in パレメーターで除外したい投稿 ID(配列)を指定できます。
$cata_query = new WP_Query( array(
'category_name' => 'cata',
'posts_per_page' => 5,
'post__not_in' => $do_not_duplicate // 除外する投稿 ID(配列)
) );
2つめのループの
$do_not_duplicate_report[] = $post->ID;
がいらないのではないでしょうか。
それがなくなったので、
3つめのループの
$do_not_duplicate_report
の部分は最初の
$do_not_duplicate
でいいのではないですか。
//最新記事10件表示
<ul>
<?php $my_query = new WP_Query( 'posts_per_page=10' );
while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
//カテゴリーAに属する記事5件表示 (最新記事10件に表示されている記事は除く)
<ul>
<?php $args = array('post__not_in' => $do_not_duplicate,
'category_name' => 'cata',
'posts_per_page' => 5,
);
$cata_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $cata_query ->have_posts() ) : $cata_query ->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>
//カテゴリーBに属する記事5件表示 (最新記事10件に表示されている記事は除く)
<ul>
<?php $args = array('post__not_in' => $do_not_duplicate,
'category_name' => 'catb',
'posts_per_page' => 5,
);
$cata_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $catb_query->have_posts() ) : $catb_query->the_post();?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>
SMSayakaさんに合わせた書き方がわからなかったので……と書いてるうちに他の方が書いてますね。
たぶん、条件に合う記事を書き出した後に
<?php if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>
で削除しているので、その分記事数が減っているのだと思います。
違うかな?
ご教授いただいたコードをカスタマイズし、目指していた通りの挙動が実現できました。
ループに関してまたさらに理解が深まったと実感しております。
ishitaka様
post__not_inを教えていただきありがとうございました。
codexを読み直しやっと理解できました。
使用方法にも注意が必要とのこと、学びになりました。ありがとうございました。
ioxrxogi様
具体的なコードをありがとうございます。
実は2つ目のコードは、まずカテゴリーAを3件表示し、
さらに、最新10件と先の3件を除いたカテゴリーAを4件サムネイルで表示する・・・
という挙動が最終形態だったのですが、
質問様に多少コードを整形していたら中途半端なコードが残った状態でした。
大変失礼いたしました。
本件は解決済みとさせていただきます。
下記、最終のコードを記載します。
//最新記事10件表示
<ul>
<?php $my_query = new WP_Query( 'posts_per_page=10' );
while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
//カテゴリーAに属する記事3件表示 (最新記事10件に表示されている記事は除く)
<ul>
<?php $args = array('post__not_in' => $do_not_duplicate,
'category_name' => 'cata',
'posts_per_page' => 3,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID;?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>
//カテゴリーAに属する記事さらに4件表示 サムネイルリンクを表示する
// (最新記事10件に表示されている記事&先に表示したカテゴリA 3件を除く)
<ul>
<?php $args = array('post__not_in' => $do_not_duplicate,
'category_name' => 'cata',
'posts_per_page' => 3,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();?>
<li><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>
//カテゴリーBに属する記事5件表示 (最新記事10件に表示されている記事は除く)
<ul>
<?php $args = array('post__not_in' => $do_not_duplicate,
'category_name' => 'catb',
'posts_per_page' => 5,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
</ul>