如何将WordPress帖子分成两列?

时间:2016-03-31 20:54:29

标签: php wordpress while-loop

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

目前我正在使用2个单独的循环执行此操作,但如果可能的话,我希望使用一个循环。

<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>

感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

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

在主题目录中创建两个文件,一个名为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/

答案 1 :(得分:1)

不容易但可能。

<?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并在它达到2时重置它。所以你继续用数据填充数组 - 首先是键1,然后是键2,依此类推。

然后你只需将这两个输出为2列(在我的情况下为span6)。

希望这有帮助。

答案 2 :(得分:0)

这不起作用 - 但它应该让你有一个良好的开端

    <?php
$my_posts = array();
while ( have_posts() ) : the_post(); 
  $my_posts[] =  $post;
endwhile;
?>
<div class="left-side">
<?php
for($i=0;$i<count($my_posts);$i++){
  print_r($my_posts[$i][0]);
}
?>
</div>
<div class="right-side">
<?php
for($i=0;$i<count($my_posts);$i=$i+2){
  print_r($my_posts[$i][0]);
}
?>
</div>