在WordPress循环中,如何查看已循环的帖子数量?

时间:2016-11-23 08:13:33

标签: wordpress loops

我的目标是在每四个帖子后打印一些额外的HTML。

以下代码有什么问题

<?php while ( have_posts() ) : the_post(); ?>
    <?php wc_get_template_part( 'content', 'product' ); ?>
    <?php
        $posts = $wp_query->post_count;

        if ( $posts == 4 ) {
            echo '<div class="clearfix"></div>';
        }
    ?>
<?php endwhile; // end of the loop. ?>

4 个答案:

答案 0 :(得分:6)

使用The Loop的基本代码,您可以包含一个计数器,在每次迭代时递增计数器并检查其零模块是否为四。

<?php if ( have_posts() ) : $count = 1; ?>
    <?php while ( have_posts() ) : the_post();?>    
    <!-- do stuff ... -->
    <?php if ( $count % 4 == 0 ): ?>
        <!-- extra stuff every four posts -->
    <?php endif; ?>
    <?php $count++; endwhile; ?>
<?php endif; ?>

答案 1 :(得分:4)

我知道这个问题已经得到解答,但我认为有更简洁的方法可以做到这一点。

您可以使用WP_Query对象中的几个有用属性,而不必添加自定义增量器。

<?php
// Do not forget this part, required if you do not define a custom WP_Query
global $wp_query;

// Below you can find some useful properties in the WP_Query object
// Use them to their full potential

// Gets filled with the requested posts from the database.  
echo $wp_query->posts;

// The number of posts being displayed. 
echo $wp_query->post_count;

// The total number of posts found matching the current query parameters 
echo $wp_query->found_posts;

// The total number of pages. Is the result of $found_posts / $posts_per_page 
echo $wp_query->max_num_pages;

// Index of the post currently being displayed. (Can only be used within the loop)
while( have_posts() ) : the_post();
    echo $wp_query->current_post;
endwhile;

使用$ current_post属性时,你的循环看起来像这样。

<?php global $wp_query; ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php wc_get_template_part( 'content', 'product' ); ?>
    <?php
        if ( ( $wp_query->current_post + 1 ) % 4 === 0 ) {
            echo '<div class="clearfix"></div>';
        }
    ?>
<?php endwhile; // end of the loop. ?>

我认为这是一个很好的清洁解决方案。

在此处阅读有关WP_Query对象的更多信息: https://codex.wordpress.org/Class_Reference/WP_Query

答案 2 :(得分:2)

试试这个

<?php 
$count = 1;
while ( have_posts() ) : the_post(); 
    wc_get_template_part( 'content', 'product' ); 
    if ( $count%4==0 ) {
        echo '<div class="clearfix"></div>';
    }
    $count++;
endwhile;  ?>

答案 3 :(得分:0)

我的答案之前可能有一个错误:它在每四个帖子的末尾回应“结束”标签 - 但是如果帖子数是5?(或任何其他数字)不能被4整除?当然,解决这个问题的需求可能因HTML而异。)

用5:

来看这个例子

- 后1-- - 后缀2--
- 后3 -
- 后4 -
- 关闭标签 -
- 后缀5--
??????

您可以看到在第5个帖子之后,循环未使用结束标记关闭。

因此我建议使用此代码(该帖子的数量或帐号中的posts_per_page数量):

<?php
    // taking @Jordi Nebot's code from his answer - thank you
    if ( have_posts() ) : $count = 1;
?>
    <?php while ( have_posts() ) : the_post();?>    
    <!-- do stuff ... -->
    <?php
        // the conditions in the if are triggered after every 4th post
        // OR if all the posts have been echoed OR all the posts for 
        // this page have been echoed
        if ( $count % 4 == 0 || $wp_query->found_posts == $count || $wp_query->posts_per_page == $count ):
    ?>
        <!-- extra stuff every four posts -->
    <?php endif; ?>
    <?php $count++; endwhile; ?>
<?php endif; ?>