PHP While While循环包装每4个结果

时间:2014-09-18 13:32:32

标签: php wordpress

我试图将每个4个结果包装在LI中,并重复每4个项目,如

<li>
 <div>item 1</div>
 <div>item 2</div>
 <div>item 3</div>
 <div>item 4</div>
</li>

PHP到目前为止....我尝试的循环当然不起作用:)。

if ( $query->have_posts() ) {
    $opnews .= '<ul class="newsitems orbit-slides-container">';
    $count = 0;
    while ( $query->have_posts() ) : $query->the_post();
        $post_id = get_the_ID();
        $opnews_item_data = get_post_meta( $post_id, 'opnews_item', true );
        if ($i%4 == 1) {
            $opnews .= '<li>';
        }
        $opnews .= '<div class="columns large-3 small-12 medium-3">';
        $opnews .= '<div class="panel green opacity-change">';
        $opnews .= '<h1>' . get_the_title() . '</h1>';
        $opnews .= get_the_content_with_formatting();
        $opnews .= '</div>';
        $opnews .= '</div>';
        if ($count%4 == 0) {
            $opnews .= '</li>';
        }
    endwhile;
    $opnews .= '</ul>';
    wp_reset_postdata();
}

4 个答案:

答案 0 :(得分:2)

您正在使用$i$count,因此只选择一个。

然后你必须在你的<li> 之间增加才能让它正常工作。

最后,你应该在完成循环后检查最后<li>是否已经回显,否则你会遇到麻烦(缺少</li>

$array = range(1, 9);

$i = 0;
foreach ($array as $val) {
  if ($i%4 == 0) echo '<li>';
  $i++;
  echo $val;
  if ($i%4 == 0) echo '</li>';
}
if ($i%4 != 0) echo '</li>';

输出:

<li>
  1 2 3 4
</li>
<li>
  5 6 7 8
</li>
<li>
  9
</li>

答案 1 :(得分:1)

模数运算符(%)除以数字并返回余数。因此,您的第if ($i%4 == 1)行可能不是您所追求的,就好像它是第4行一样,您希望它没有余数。

$count%4 == 0行对我来说也没有多大意义,因为你没有增加数字。您还没有递增$i

尝试以下方法:

if ( $query->have_posts() ) {
    $opnews .= '<ul class="newsitems orbit-slides-container">';
    $i = 0;
    while ( $query->have_posts() ) : $query->the_post();
        $post_id = get_the_ID();
        $opnews_item_data = get_post_meta( $post_id, 'opnews_item', true );
        if ($i%4 == 0) {
            if ($i != 0){
                $opnews .= '</li>';
            }
            $opnews .= '<li>';
        }
        $opnews .= '<div class="columns large-3 small-12 medium-3">';
        $opnews .= '<div class="panel green opacity-change">';
        $opnews .= '<h1>' . get_the_title() . '</h1>';
        $opnews .= get_the_content_with_formatting();
        $opnews .= '</div>';
        $opnews .= '</div>';
        $i++;
    endwhile;
    $opnews .= '</li>';
    $opnews .= '</ul>';
    wp_reset_postdata();
}

答案 2 :(得分:0)

您似乎正在混合$i$count。其中一个你正在使用modulous运算符并比较除法后的余数是否为1,另一个你要比较余数是否为0.它们中的任何一个似乎都没有递增(和{{1}看起来不是从您提供的代码段中定义的。

选择一个,$i,并使用modulous将其与0进行比较,并确保在循环中将其递增:

$count

答案 3 :(得分:0)

它不起作用,因为你永远不会改变计数。 Count始终为0,因此$count % 4 == 0始终为true。此外,除非它在其他地方,否则您无法定义i

仅使用count(或仅i)。

if ($count % 4 == 0) {
    $opnews .= '<li>';
}

DO STUFF HERE

$count += 1

if ($count % 4 == 0) {
    $opnews .= '</li>';
}