从其他循环中获取一个帖子主循环中的每个n个帖子

时间:2016-01-05 作者:Sergey

这是我想要实现的布局。

第1行:三列中的三个帖子来自A类,第2行:一个全宽帖子来自B类,第3行:接下来的三个帖子来自A类,第4行:接下来的三个帖子来自B类,等等

-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |
-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |
-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |
基本上有两个循环,一个在另一个内部,分别并行运行。

我可以通过$wp_query->current_post 并插入新的WP_Query 每三个岗位后,只有一个岗位(由posts_per_page=>1) 并被以前的职位数量抵消(按offset=>$wp_query->current_post).

恐怕在第三篇帖子之后调用新的WP\\u查询会占用大量内存。在我上面指定的标记中显示帖子有没有更好的替代方法?非常感谢。

1 个回复
SO网友:Howdy_McGee

这是你能做的。在页面顶部,运行第一个WP\\U查询。使用查询中的帖子数量计算二次查询所需的帖子数量cat_a 除以3并使用PHP floor() 删除任何余数。这将确保您的第二个查询只包含获得所需模式所需的确切帖子数。

显示时,我们可以使用PHP Modulus 显示我们的cat_b 之前发布cat_a 4(增量)始终显示。在这种情况下,我进入循环cat_b 但是break 这样WordPress就可以跟踪我们在循环中的位置,而无需跟踪。

总的来说,这个想法是这样的。我没有测试过,所以如果你遇到问题turn on debugging 并查看是否可以修复任何PHP错误。

$cat_b = \'\';
$cat_a = new WP_Query( array(
    \'category\'          => \'a\',
    \'posts_per_page\'    => 60,
) );

if( $cat_a->have_posts() ) {
    $num_posts = floor( $cat_a->post_count / 3 );

    if( $num_posts > 0 ) {
        $cat_b = new WP_Query( array(
            \'category\'      => \'b\',
            \'posts_per_page\'=> $num_posts,
        ) );
    }
}


if( $cat_a->have_posts() ) : $index = 1; ?>

    <?php while( $cat_a->have_posts() ) : $cat_a->the_post(); ?>

        <?php if( ! empty( $cat_b ) && 0 == $index % 4 && $cat_b->have_posts() ) : ?>

            <?php while( $cat_b->have_posts() ) : $cat_b->the_post();

                <h1><?php the_title(); ?></h1>

            <?php
                wp_reset_postdata();
                break;
                endwhile;
            ?>

        <?php endif; ?>

        <h1><?php the_title(); ?></h1>

    <?php
        $index++;
        endwhile;
    ?>

<?php
    wp_reset_postdata();
    endif;
?>

相关推荐

WordPress Custom Post Loop

我正在尝试循环浏览自定义WordPress帖子,遇到了一个问题,比如我添加了自定义字段并想在中显示它<li> 使用循环。我成功地完成了操作,但数据/链接/类别正在重复,如果类别与以下内容相同,我希望只显示一次:如果我有2篇带有data1类别的帖子,那么链接将只显示data1once 但我有2个不同类别的帖子,然后它会分别显示每个帖子。Sample Code:<ul class="filter filter-top"> <li cla