我需要将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>
感谢任何帮助!
答案 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>