每 3 个项目换行并为每个问题添加 div -

Wrap every 3 items and add a div - for each problem

我想包装每 3 个项目并在这些项目之后添加一个 div(.expanded 行),然后继续其他行并重复相同的操作。这必须是输出:

<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>

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

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

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

这是我用来尝试获取它的函数:

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

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


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


  <?php 
    if ($counter % 3 == 2) {
    ?>
      </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 $name;
          echo '</div>';

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

  ?>

我遇到的问题是 for each 函数只显示 expanded row 上的最后一个 $name(名称 3 和名称 6),因此这是我正确的输出现在,知道问题是什么以及如何解决了吗?

<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>

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

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

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

我很确定这是因为你的foreach()存在于if($counter % 3 == 2)语句中而$name不存在于$content_array中,所以[=14的值=] 总是迭代 $counter % 3 == 2 并且将回显与 $content_array.

的长度一样多的次数

我必须说,这个循环结构不是很健壮和可读。考虑以更“最佳实践”和可扩展的方式重写循环。我不知道你的 user/cms 函数在后台做什么,所以很难为你指出另一种方法。另外,请尝试正确转义您在页面上回显的所有内容。但这都是题外话。

总而言之,为了快速修复,请尝试将 $name 包含在 $content_array 中,例如:

$content_array[ 'item-' . $counter ] = array( $expandedInfo, $name );

然后将您的 foreach() 更改为:

foreach ( $content_array as $item_id => $info_and_name ) {
    echo '<div class="expanded" id="' . $item_id . '">';
    echo $info_and_name[0];
    echo $info_and_name[1];
    echo '</div>';
}

我认为应该这样做 ;)