2012-10-29 88 views
1

我遇到了WordPress帖子循环的问题。我想分解后循环,在帖子中添加一些HTML div标签。例如,我试图在第一篇文章后添加div .wrap。因为它要包装帖子,所以它应该只有一次。PHP:断开循环,然后继续?

问题是.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

你不必打破循环 –

+0

是的,包装输出代码不循环。 – Overv

回答

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

你可以只使用一个迭代指数,是这样的:

$i = 0; 
while (...) { 
    if ($i == 1) { 
     // actions you need to do only once 
    } 

    ... 
    $i++ 
} 
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> 
+0

我的问题是只在循环中添加一个额外的div换行。 – user1251698

+0

是的,代码会做到这一点;-) – VolkerK