防止重复开机自检的动态多循环

时间:2015-06-06 作者:helmiaditya14

我试着列出20篇最近的帖子,并在每5个项目上放置一篇来自自定义帖子类型的帖子。所以就像:

自定义帖子类型。。等等

<?php $counter = 1;
$loop = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => 20) );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li class="group">
Post Content
</li>
<?php
if ($counter % 5 == 0){
  $inner_query = new WP_Query(array( \'post_type\' => \'custom-type\', \'posts_per_page\' => 1, \'orderby\' => \'rand\'));
  while ($inner_query->have_posts()) : $inner_query->the_post(); ?>
  <li>Custom Post Type Content</li>
  <?php endwhile;
}
$counter++ ;
endwhile; ?>
如何防止自定义帖子类型上的帖子重复?

谢谢

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

不要在主循环的每次迭代中为您的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
    }
  }
}

结束

相关推荐

Help with if/else loop

你能帮我在这个循环中添加一个else语句吗?<?php $post_type = \'post\'; // <-- Post Type $tax = \'temporada\'; // <-- Taxonomía $termino = get_terms($tax); $category = get_the_category(); $cat_name = $category[0]->cat_ID; if ($termino) {