我需要一个div来包装wordpress循环中的每四个帖子。所以就像
<div>
four posts
</div>
<div>
four posts
</div>
我目前的代码就是这个
<?php
$i = 0;
$wrap_div = "<div class='frak'>";
if ( have_posts() ) {
echo $wrap_div;
while ( have_posts() ) {
the_post();
?>
<div class="wine-section">
<?php the_post_thumbnail(); ?>
<div class="wine-info">
<a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a>
<?php the_meta(); ?>
</div><!-- /wine-info -->
<div class="c"></div>
</div><!-- /wine-section -->
<?php
if ($i % 4 == 0) { echo "</div>" . $wrap_div; }
} // end while
} // end if
$i++;
?>
此代码单独包装每个帖子。有什么想法吗?
答案 0 :(得分:1)
正如geomagas所指出的那样 - 你正在将变量递增到循环之外。然后0 % 4 == 0
评估为真 - 那是因为当你将0除以4时,你得到0.为了解决这种情况,你还需要一个规则。
另外请不要忘记,如果帖子的总数例如是12,那么使用当前代码,您的帖子末尾会有一个空的“frak”div。
<?php
$i = 0;
$wrap_div = "<div class='frak'>";
if ( have_posts() ) {
// Grab the total posts that are being displayed
$total_posts = $wp_query->post_count;
echo $wrap_div;
while ( have_posts() ) {
the_post(); ?>
<div class="wine-section">
<?php the_post_thumbnail(); ?>
<div class="wine-info">
<a href="<?php the_permalink(); ?>"><?php the_title( '<h1>', '</h1>' ); ?></a>
<?php the_meta(); ?>
</div><!-- /wine-info -->
<div class="c"></div>
</div><!-- /wine-section -->
<?php
// Is this a fourth post? If so, make sure it is not the last post?
if ( $i % 4 == 0 && $i != 0 && ( $i + 1 ) != $total_posts ) {
echo '</div>' . $wrap_div;
}
$i ++;
} // end while
// Close the $wrap_div
echo '</div>';
} // end if
?>
正如您所看到的那样,打印结束标记的if
语句和新包装现在更加复杂。
它确保$ i不为0(意味着它仍然是第一个帖子)并且$ i + 1不等于显示的帖子总数(对于这种情况,我们在while()
循环后关闭)。
如果你想知道为什么我们在while()
循环之后关闭 - 仅仅是因为你的帖子在4上可能并不总是多个(我不确定这里的英文翻译是否正确) - 以及如果是这种情况,你不会在while循环后关闭你的div - 你会遇到麻烦。
答案 1 :(得分:0)
您正在$i
循环之外递增while
,因此其中$i
始终为==0
,因此$i % 4 == 0
。
在$i++;
之前移动} // end while
。
但是,您还应该将条件更改为$i % 4 == 3
,因为$i % 4 == 0
会在第一次迭代(true
)中评估为$i=0
并生成初始<div>
1}}只有一个帖子。
或者,您可以保持原状,并且:
以$i=1
而不是0
或在$i++
之后立即移动while
。
现在,当您有4个帖子的确切倍数时,最后会显示一个额外的空<div>
。那是因为你假设,当<div>
关闭时,另一个应该自动打开。情况并非总是如此。
假设您选择了上面的$i % 4 == 3
解决方案,并且在echo '</div>';
循环后已经有while
,请将您的条件更改为if(($i % 4 == 3)&& have_posts())
。