我遇到了WordPress帖子循环的问题。我想打破post循环,在帖子中添加一些HTML div标签。例如,我在第一篇文章后尝试在帖子周围添加div .wrap
。由于要包装帖子,所以它应该只有一次。
问题是由于循环,.wrap
div正在重复。如何打破循环,只添加.wrap
div一次,然后继续循环?
这是我的代码:
while ($wp_query->have_posts()) :
$wp_query->the_post();
if($wp_query->current_post <= 1){ ?>
<div class="x">
.. post 1
</div>
<?php }
if($wp_query->current_post > 1){ ?>
<div class="wrap"> <!-- should be only once -->
<div class="y">
.. post 2
</div>
<div class="y">
.. post 3
</div>
</div><!-- should be only once -->
<?php } ?>
endwhile;
答案 0 :(得分:3)
试试这个
<?php
while ($wp_query->have_posts()) :
$wp_query->the_post();
if($wp_query->current_post <= 1){ ?>
<div class="x">
.. post 1
</div>
<div class="wrap"> <!-- should be only once -->
<?php
$is_wrapped = 1;
}
if($wp_query->current_post > 1){ ?>
<div class="y">
.. post 2, then post 3, ...
</div>
<?php }
endwhile;?>
<?php if (!empty($is_wrapped)){ ?>
</div><!-- should be only once -->
<?php } ?>
答案 1 :(得分:1)
您可以使用迭代器索引,如下所示:
$i = 0;
while (...) {
if ($i == 1) {
// actions you need to do only once
}
...
$i++
}
答案 2 :(得分:1)
<div class="x">
while ($wp_query->have_posts()) :
$wp_query->the_post();
<--print post-->
if($wp_query->current_post <= 1){
</div><div class="y">
}
endwhile;
</div>
如果没有帖子,您将获得空<div class="x" />
,如果只有一个帖子,则会显示空<div class="y" />
。但在你的情况下可能是可行的......
编辑:示例
<?php
$wp_query = new WPDummy;
echo '<div class="x">';
while ($wp_query->have_posts()) :
$wp_query->the_post();
$wp_query->the_content();
if($wp_query->current_post <= 1){
echo '</div>', "\n",'<div class="y">';
}
endwhile;
echo '</div>';
// boilerplate
class WPDummy {
public $current = null;
public $current_post = 0;
public function __construct() {
$this->posts = array( array('content'=>'A'),array('content'=>'B'),array('content'=>'C'),array('content'=>'D') );
}
public function have_posts() {
return false!=current($this->posts);
}
public function the_post() {
$this->current_post+=1;
$this->current = current($this->posts);
next($this->posts);
}
public function the_content() {
echo '<span class="content">', $this->current['content'], '</span>';
}
}
打印
<div class="x"><span class="content">A</span></div>
<div class="y"><span class="content">B</span><span class="content">C</span><span class="content">D</span></div>