将CPT输出分解为两列

时间:2016-02-22 作者:Zach Smith

我有以下代码。我有一个左div和一个右div。我如何编辑下面的代码来提取第一个X CPT数据并将其放入右列,以及将下一个XX号CPT数据放入左列?现在,我只是在两列中打印相同的查询。任何帮助都将不胜感激。

<div class="generic-page-container clearfix smallwidth">
    <div class="content_left">
        <?php
            $args = array( \'post_type\' => \'testimonials\', \'posts_per_page\' => 10 );
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post();
              //the_title();
              echo \'<div class="testimonials_block">\';
              the_content();
              echo \'</div>\';
            endwhile;
        ?>
    </div><!--/#content_left -->
    <div class="content_right">
        <?php
            $args = array( \'post_type\' => \'testimonials\', \'posts_per_page\' => 10 );
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post();
              //the_title();
              echo \'<div class="testimonials_block">\';
              the_content();
              echo \'</div>\';
            endwhile;
        ?>
    </div><!--/#content_right -->
</div><!--#generic-page-container -->

2 个回复
SO网友:Adam

使用一个查询和class属性WP_Query::$current_post 其索引将从0.

当我们迭代可用的帖子时,我们检查$current_post 索引值+1 使其与$posts_per_page 价值

如果$current_post 小于一半(本例中为5),我们将标记推送到数组上$content[\'left\'] 反之亦然,右侧$content[\'right\'] 当我们在6到10号岗位上时。

最后,在需要标记/内容的地方,我们对数组进行内插并回显。。。

<?php

    $posts_per_page = 10;
    $content        = array(\'left\' => \'\', \'right\' => \'\');

    $args           = array( 
        \'post_type\'      => \'testimonials\', 
        \'posts_per_page\' => $posts_per_page 
    );

    $loop = new WP_Query( $args );

    while ( $loop->have_posts() ) : $loop->the_post();

      $column = ($loop->current_post+1) < ($posts_per_page/2) ? \'left\' : \'right\';

      $content[$column] .= \'<div class="testimonials_block">\' . get_the_content() . \'</div>\';

    endwhile;

?>

<div class="generic-page-container clearfix smallwidth">
    <div class="content_left"><?php echo implode(\'\', $column[\'left\']);?></div>
    <div class="content_right"><?php echo implode(\'\', $column[\'right\']);?></div>
</div><!--#generic-page-container -->
还有其他方法可以解决这个问题,这只是一个。。。

SO网友:StephenWidom

不要运行查询两次。使用get_posts($args) 而不是new WP_Query. 然后使用array_slice() 生成长度相等的数组并以这种方式循环。

array_slice() 帮助:https://stackoverflow.com/questions/5393028/how-can-i-take-an-array-divide-it-by-two-and-create-two-lists