如何将WordPress帖子循环到两列中


How to separate WordPress posts loop in to two columns?

我需要将WordPress帖子循环分为左右两列。

目前我用两个单独的循环来做这件事,但如果可能的话,我想用一个循环来做。

<div class="left-side">
    <?php 
        $row_start = 1; 
        while ( have_posts() ) : the_post(); 
            if( $row_start % 2  != 0) {// odd
                get_template_part( 'blog','item');
            }
            ++$row_start; 
        endwhile;
    ?>
</div>
<div class="right-side">
    <?php  
      $row_start = 1; 
       while ( have_posts() ) : the_post(); 
        if( $row_start % 2 == 0) {// even
            get_template_part( 'blog','item');
        }
        ++$row_start; 
        endwhile;
    ?>
</div>

感谢您的帮助!

将循环移动到单独的模板文件中。

在主题目录中创建两个文件,一个名为posts-odd.php,另一个名为posts-even.php,并分别添加post循环,即:

posts-odd.php:

<?php 
    $row_start = 1; 
    while ( have_posts() ) : the_post(); 
        if( $row_start % 2  != 0) {// odd
            get_template_part( 'blog','item');
        }
        ++$row_start; 
    endwhile;
?>

posts-even.php:

<?php  
  $row_start = 1; 
   while ( have_posts() ) : the_post(); 
    if( $row_start % 2 == 0) {// even
        get_template_part( 'blog','item');
    }
    ++$row_start; 
    endwhile;
?>

在主模板中,您现在可以使用get_template_part函数将部分模板包含到主模板中:

<div class="left-side">
    <?php get_template_part('posts', 'odd') ?>
</div>
<div class="right-side">
    <?php get_template_part('posts', 'even') ?>
</div>

如果你在不同的地方显示奇数和偶数的帖子,这将使你只需要定义一次循环模板。

https://developer.wordpress.org/reference/functions/get_template_part/

这并不容易,但却是可能的。

<?php
$i = 0;
$column = array();
$column[1] = $column[2] = '';
if (have_posts()) :
    while (have_posts()) :
        the_post();
        $i++;
        $column[$i] .= '<div class="'.esc_attr(implode(' ', get_post_class())) .'">';
            $column[$i] .= '<div class="post_inner">
                            '.get_the_content().'
                            </div>
                        </div>';
        $i = ($i==2) ? 0 : $i;
    endwhile; ?>
    <div id="grid_posts">
        <div class="span6"><?php echo $column[1]?></div>
        <div class="span6"><?php echo $column[2]?></div>
    </div>
<?php else: ?>
    <p><?php esc_html_e('No posts were found. Sorry!', 'mytheme'); ?></p>
<?php endif; ?>

基本上,您可以创建列数组,并将内容放在两个键(1和2)中,每两个帖子放在一列中,并不断将计数器增加到2,一旦达到2,则将其重置。所以你一直在数组中填充帖子——先到键1,然后到键2,以此类推

然后您只需将这两个输出到2列中(在我的例子中为span6)。

希望这能有所帮助。