不要在主循环的每次迭代中为您的CPT运行新的查询。拉一下,看看外面\'posts_per_page\' => 4
然后在运行过程中增加它。
换句话说:
$counter = 1;
$loop = new WP_Query(
array(
\'post_type\' => \'post\',
\'posts_per_page\' => 20
)
);
$inner_query = new WP_Query(
array(
\'post_type\' => \'page\',
\'posts_per_page\' => 4,
\'orderby\' => \'rand\'
)
);
while ( $loop->have_posts() ) {
$loop->the_post(); ?>
<li class="group"><?php
the_title();
echo \'(\'.$post->post_type.\')\'; ?>
</li><?php
if ($counter == 5) {
if ($inner_query->have_posts()) {
$inner_query->the_post(); ?>
<li><?php
the_title();
echo \'(\'.$post->post_type.\')\'; ?>
</li><?php
}
$counter = 0;
}
$counter++ ;
}
你必须非常小心使用计数器,仔细考虑逻辑,否则你会得到意想不到的结果。
其次,我简化了你的逻辑。不需要mod
数学,如果你像你一样使用计数器。然而,有一种方法可以完全取消计数器,如WP_Query
为您提供一个。
while ( $loop->have_posts() ) {
$loop->the_post(); ?>
<li class="group"><?php
the_title();
echo \'(\'.$post->post_type.\') (\'.$loop->current_post.\')\'; ?>
</li><?php
if ($loop->current_post != 0 && ($loop->current_post+1) % 5 == 0) {
if ($inner_query->have_posts()) {
$inner_query->the_post(); ?>
<li><?php
the_title();
echo \'(\'.$post->post_type.\')\'; ?>
</li><?php
}
}
}