一次循环迭代的多个帖子

时间:2012-08-25 作者:smogg

我想要3篇文章和一个循环迭代,所以我使用the_post() 为此:(删除html)

<?php while ( have_posts() ) : the_post();

    the_title();
    the_post();
    the_title();
    the_post();
    the_title();

endwhile; ?>
如果帖子的数量不能被3整除,问题就开始了。例如,如果我有5篇文章,那么这个循环仍然会尝试显示其中的6篇,生成空的html。我该怎么做呢?或者我试图以错误的方式实现此功能?

@编辑:这是我想输出的HTML,以澄清我的问题:

<div class="row">
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
 </div>

 <div class="row">
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
<div class="span3">
    <h2>Title</h2>
    <p>Content</p>
</div>
</div>
所以我想用.row.

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

最终,这个问题是off-topic, 因为解决方案与WordPress无关。以网格模式输出帖子是一种HTML/CSS 问题,而最佳实践解决方案并不涉及将每三篇帖子放在一个单独的包含<div>. 即便如此,您也可以使用PHP做您想做的事情(从技术上讲,PHP仍然提出了这个问题off-topic).

我将首先查询一些可以被3整除的帖子,或者设置posts_per_page 可被3整除的数字。你如何做到这一点取决于你是否打电话给一个新的WP_Query() 用于自定义帖子类型循环,或者如果正在筛选pre_get_posts 修改默认查询。无论哪种方式,您都可以使用posts_per_page 查询参数。

然后,您只需在循环中定义一个计数器,并根据需要使用它来关闭/打开div:

<div class="row">
<?php
$counter = 1;
if ( have_posts() ) : while ( have_posts() ) : the_post();

    global $wp_query;
    the_title(); 
    the_content(); 
    if ( ( 0 == $counter % 3 ) && ( $counter != $wp_query->posts_per_page ) ) {
    ?>
</div><div class="row">
    <?php
    }
    $counter++;
endwhile; endif;
?>
</div>
条件的第二部分确保在最后一行之后不会得到空div。

SO网友:smogg

在发布了这个问题之后,我有了“妙不可言”的时刻,并通过在每个帖子的html中使用简单的if(get_the_title()). 因此,如果标题不存在,则不显示任何内容。但我仍然认为还有更好的方法。

结束

相关推荐

Wordpress Loop有像Shopify‘s Cycle一样的功能吗?

Shopify的循环可以让你在一个循环中的事物之间进行交替。以下是我的示例: <div class=\"{% cycle \'first\', \'second\', \'third\' %}\"> {% include \'product-grid-item\' %} </div> 我的问题是,Wordpress有这样的服务吗?我希望在打印循环中的每个项目时,能够循环使用某种设置,例如类名。