PHP - 使用ACF Repeater每4次向foreach循环添加2个div

时间:2017-03-08 11:40:33

标签: php html wordpress advanced-custom-fields

我有一个ACF Repeater字段,我想输出一个手风琴网格,如下:

<div class="intro row">
  <div class="item item-1">name 1</div>
  <div class="item item-2">name 2</div>
  <div class="item item-3">name 3</div>
  <div class="item item-4">name 4</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-1">expanded info 1</div>
  <div class="expand" id="item-2">expanded info 2</div>
  <div class="expand" id="item-3">expanded info 3</div>
  <div class="expand" id="item-4">expanded info 4</div>
</div>

<div class="intro row">
  <div class="item item-5">name 5</div>
  <div class="item item-6">name 6</div>
  <div class="item item-7">name 7</div>
  <div class="item item-8">name 8</div>
</div>

<div class="expanded row">      
  <div class="expand" id="item-5">expanded info 5</div>
  <div class="expand" id="item-6">expanded info 6</div>
  <div class="expand" id="item-7">expanded info 7</div>
  <div class="expand" id="item-8">expanded info 8</div>
</div>

我可以将初始行分组,这只是我遇到问题的第二个“扩展”行。如何在同一循环中正确地重复和分组第二行4?我目前的PHP:

<?php // check if the repeater field has rows of data
if( have_rows('features') ):
  // loop through the rows of data

  // add a counter
  $count = 0;
  $group = 0;
  
  while ( have_rows('features') ) : the_row(); 
   
    
	$name = get_sub_field('feature_name');
	$expandedInfo = get_sub_field('feature_info');

    if ($count % 4 == 0) {
      $group++;
      ?>
        <div class="intro row">
      <?php 
    }
    ?>
    <div class="item item-<?php echo $count; ?>">
      <?php echo $name ?>
    </div><!-- item-->
    
   
    <?php 
      if ($count % 4 == 3) {
        ?>
          </div><!-- intro-->
        <?php 
      }
      $count++;
    endwhile;
else :
  // no rows found
endif;

?>

3 个答案:

答案 0 :(得分:0)

现在无法测试,但我觉得这样的事情应该有用。

<?php // check if the repeater field has rows of data
if( have_rows('features') ):
  // loop through the rows of data

  // add a counter
  $count = 0;
  $group = 0;
  $array = array();

  while ( have_rows('features') ) : the_row(); 

    $name = get_sub_field('feature_name');
    $expandedInfo = get_sub_field('feature_info');
    if ($count % 4 == 0) {
      $group++;
      ?>
        <div class="intro row">
      <?php 
    }
    ?>
    <div class="item item-<?php echo $count; ?>">
      <?php echo $name ?>
    </div><!-- item-->


    <?php 
        array_push($array, $expandedInfo);
      if ($count % 4 == 3) {
        ?>
          </div><!-- intro-->
          <div class="expanded row">
        <?php
        for ($i=0; $i < count($array); $i++) { 
            echo '<div class="expand" id="item-'.$i + 1.'">'.$array[$i].'</div>';
        }
        echo '</div>';
      }
      $count++;
    endwhile;
else :
  // no rows found
endif;

?>

答案 1 :(得分:0)

第二个&#39;扩展&#39;可以完成行,以便将每个计数(item-1,item-2)存储在数组中,或者只是在关闭介绍行时遍历所有计数。

<?php
if ($count % 4 == 3) {
    ?>
      </div><!-- intro-->
      <div class="expanded row">
         <?php 
          $start = $count-3; 
          // if $count is 4, $start will be 1, and the $i will go to 4
          // if $count is 8, $start will be 5
         for($i=$start;$i<=$count;$i++){
           echo '<div class="expand" id="item-' . $i . '"></div>';
         } ?>
      </div>
    <?php 
  }

这只是一个例子。我建议你将每个$ count存储在一个数组中,然后使用count($ array)来获取它们的数量。遍历数组后,重置它。

数组方法

<?php // check if the repeater field has rows of data
  if( have_rows('features') ):
  // loop through the rows of data

  // add a counter
  $count = 0;
  $group = 0;
  // Content Array
  $content_array = array();
  while ( have_rows('features') ) : the_row(); 


    $name = get_sub_field('feature_name');
    $expandedInfo = get_sub_field('feature_info');
    // Adding the Expanded Info
    $content_array[ 'item-' . $count ] = $expandedInfo;
    if ($count % 4 == 0) {
      $group++;
     ?>
      <div class="intro row">
     <?php 
    }
   ?>
   <div class="item item-<?php echo $count; ?>">
    <?php echo $name ?>
   </div><!-- item-->


   <?php 
     if ($count % 4 == 3) {
    ?>
      </div><!-- intro-->
      <div class="expanded row">
         <?php 

         foreach( $content_array as $item_id => $expanded_info ) {

          echo '<div class="expanded" id="' . $item_id . '">';
          echo $expanded_info;
          echo '</div>';

         } ?>
      </div>
    <?php 
    // Resetting the Array
    $content_array = array();
  }
  $count++;
  endwhile;
else :
// no rows found
endif;

?>

答案 2 :(得分:0)

okey,让我们看看,

使用变量存储模板在这种情况下可能会有很大帮助,

如下:

$intro = '';
$expanded = '';
while (have_rows('features')) :

    the_row();

    if ($count % 4 == 0) {
        $group++;

        $intro .= '<div class="intro row">';
        $expanded .= '<div class="expanded row">';

    }
    $intro .= '<div class="item item-' . $count . '"></div><!-- item-->';
    $expanded .= '<div class="expand" id="item-' . $count . '"></div>';

    if ($count % 4 == 3) {
        $intro = '</div><!-- intro-->';
        $expanded = '</div><!-- intro-->';
    }
    $count++;
endwhile;

我已经做了一个简单的解释,向您展示如何使用变量来解决您的问题:https://3v4l.org/cKPP4