我需要将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
)。
希望这能有所帮助。