【问题标题】:PHP Loop - Add a Div around every three ItemsPHP 循环 - 每三个项目添加一个 div
【发布时间】:2016-06-23 09:20:39
【问题描述】:

这是适用于 3 个项目的代码,如果有 3 个项目的精确倍数(即,如果我们有 9 个项目),那么它将在末尾添加一个额外的空白 div。

如果有不是 3 的倍数的项目(即,如果我们有 8 个项目),那么它可以正常工作。我不是程序员,

所以任何帮助将不胜感激:

下面是代码示例:

<div class="row">
    <?php 
       $i = 1;
       $wp_query = new WP_Query( array( 'posts_per_page' => -1, 
                  'post_type' => 'projects' ) );
      echo '<div class="panel">';
      if ( $wp_query->have_posts() ) : 
         while ( $wp_query->have_posts() ) : $wp_query->the_post();
         the_title();         
       if($i % 3 == 0) { echo '</div><div class="panel">'; }
     $i++; 
      endwhile; endif;
     echo '</div>';    
  ?>

</div>

【问题讨论】:

  • 检查 $i 的值。如果 '$i%9' 的值为 0。则在 while 循环的末尾添加一个额外的 div。
  • 你的意思是最后多加一个div?如果我们有 9 个项目?
  • 你可以看看函数array_chunk

标签: php wordpress loops


【解决方案1】:

如果我正确理解您的问题,如果您的查询返回 3 项的精确倍数,您不想添加一个空 div。

所以改为:

if($i % 3 == 0)

使用这个:

if($i % 3 == 0 && $wp_query->post_count != $i)

我的建议是将您的代码编辑为:

<div class="row">
    <?php 
    $i = 1;
    $wp_query = new WP_Query(array('posts_per_page' => -1, 'post_type' => 'projects'));
    echo '<div class="panel">';
    if($wp_query->have_posts()) : while ($wp_query->have_posts()) :
         $wp_query->the_post();

         the_title();         
         if($i % 3 == 0 && $wp_query->post_count != $i){
             echo '</div><div class="panel">';
         }
         $i++; 
     endwhile; endif;
     echo '</div>';    
  ?>

</div>

但从那时起,Max P. 使用我的建议做出了更好的回答。两个代码之间的区别在于,当没有给定项目时,此代码会创建一个空 div,但他不会。

【讨论】:

  • 现在如果有3个项目的倍数,那么它会给出一个额外的div,否则不会!!!! ???
  • @SalihK 如您所见,我使用的运算符 (!=) 表示“不等于”,这意味着如果您的 $i 变量与您的项目数相等,这将返回 false 跨度>
  • 能否请您展示如何将您的逻辑与上面的整个代码一起使用,因为它不适合我。它更具可读性,感觉是 wp 方式
【解决方案2】:

试试这个代码

<div class="row">
    <?php 
      $i = 1;
      $wp_query = new WP_Query( array( 'posts_per_page' => -1, 
                  'post_type' => 'projects' ) );

      if ( $wp_query->have_posts() ) : 
         while ( $wp_query->have_posts() ) :
            if($i % 3 == 1) { echo '<div class="panel">'; }
            $wp_query->the_post();
            the_title();         
            if($i % 3 == 0 || $i == $wp_query->post_count) { echo '</div>'; }
            $i++; 
         endwhile;
      endif; 
  ?>

</div>

【讨论】:

  • @SalihK 如果项目编号不能被 3 整除,则不会添加关闭 div。
  • @MaxP。你可以使用or 运算符$i % 3 == 0 || $i == $wp_query-&gt;post_count 你会得到相同的结果,但我认为这会使代码可读。
【解决方案3】:

如果不是 3 的倍数,您可以在循环结束后添加 div

<div class="row">
<?php 
    $i = 1;
    $wp_query = new WP_Query( array( 'posts_per_page' => -1, 
        'post_type' => 'projects' ) );
    echo '<div class="panel">';

    if ( $wp_query->have_posts() ) : 
        while ( $wp_query->have_posts() ) :
            $wp_query->the_post();
            the_title();         
            if($i % 3 == 0) { echo '</div><div class="panel">'; }
            $i++; 
        endwhile;
    endif;
    if($i % 3 != 0) { echo '</div><div class="panel">'; }
    echo '</div>';
?>
</div>

【讨论】:

    【解决方案4】:

    有很多方法可以解决这个问题,这里有一个:

    <div class="row">
    <?php 
    
      echo '<div class="panel">';
      $i = 0;
      $wp_query = new WP_Query(array('posts_per_page' => -1, 
                                     'post_type'      => 'projects'));
      if ($wp_query->have_posts()) { 
        while ($wp_query->have_posts()) {
          if($i % 3 == 0)
          {
            if ($i > 0) echo '</div>';
            echo '<div class="panel">';
          }
          $wp_query->the_post();
          the_title();         
          $i++; 
        }
        echo '</div>';    
      } 
    
    ?>
    </div>
    

    我还清理了代码,去掉了没有帖子时出现的bug。

    【讨论】:

      【解决方案5】:

      您可以添加一个名为$j$j = floor($i/3) 的变量。

      然后if($i % 3 == 0 &amp;&amp; $i != 3 * $j) { echo '&lt;/div&gt;&lt;div class="panel"&gt;'; };

      【讨论】:

        猜你喜欢
        • 2012-02-15
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 2012-10-27
        • 2016-07-19
        • 1970-01-01
        • 2016-07-15
        • 2010-12-20
        相关资源
        最近更新 更多