同一页面中有多个循环,没有重复内容

时间:2012-11-11 作者:Martin Aston

我正在尝试创建一个包含多个循环的页面,我需要每个循环显示来自同一类别的预定义数量的帖子(每个循环显示来自类别猫的X个帖子)。但我还需要第二个循环、第三个循环等来显示最后一个循环停止的帖子,而不复制内容(例如:从帖子1到5的循环1、从帖子6到10的循环2、从帖子11到15的循环3等等)。以下是我迄今为止所做的尝试(我也尝试了wordpress codex中的代码,但似乎没有任何效果)

你能帮帮我吗?

这是我目前的代码;

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=5\'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=4\'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=3\'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=2\'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

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

阅读这篇文章很重要Codex chapter 一直到最后,因为基本建议都在本标题之后\'Note for Multiple Posts in the First Category\';

重复、乏味的代码:

<?php   $do_not_duplicate = array(); ?>
<?php   $mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=5\'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( \'category_name\' => \'mosaics\', \'posts_per_page\' => 4, \'post__not_in\' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( \'category_name\' => \'mosaics\', \'posts_per_page\' => 3, \'post__not_in\' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( \'category_name\' => \'mosaics\', \'posts_per_page\' => 2, \'post__not_in\' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

SO网友:Milo

虽然Michael的答案是可行的,但如果您可以在一个查询中获得所有结果并在PHP中处理分解输出,那么对此进行多个查询是对数据库资源的浪费。看见this answer 我提出了另一个类似的问题,只需对数据库进行一次查询即可获得相同的结果。

SO网友:Mario Peshev

要么使用wp_reset_query() 在每次查询之后,以清除以前查询的结果,或创建WP_Query 循环将通过局部变量而不是全局变量进行迭代的实例。

SO网友:Ahmad M

在后续循环中使用偏移参数,这将在指定的数字之后开始显示帖子:

// starts from post 6 to post 10
$mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=5&offset=5\');

// starts from post 11 to post 15
$mosaics = new WP_Query(\'category_name=mosaics&posts_per_page=5&offset=10\');

SO网友:Luis

The magic.

 wp_reset_query();
这可以用来为进一步调用WP\\u Query扫清道路。Or 要避免由于对循环的非结构化调用而导致的重复,请执行以下操作:

$data = query_posts($args);

结束

相关推荐

Show Posts to Author Only

我已经在WordPress中为我的一个网站开发了发票系统。我使用了自定义的帖子类型和自定义的元字段,集成的支付网关来满足我的需要。用户一般生成发票上传资金。我使用了来自前端的post提交,以便用户可以自己创建发票。一切都运行顺利,但用户创建的一张发票对其他用户可见。例如,创建的发票,id:APL-2012110489586。用户B可以通过键入domin访问发票。com?发票=APL-2012110489586。现在我想限制其他用户访问发票。只有管理员和发票创建者才能访问发票。所有用户都是订户角色。需要您的