我希望每三个条目包装一次,并在这些项之后添加一个div (.expanded行),然后继续使用其他行并重复相同的行。这必须是be输出:
<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>发布于 2022-01-04 12:27:25
我确信这是因为您的foreach()存在于if($counter % 3 == 2)语句中,而$name不存在于$content_array中,因此$name的值始终是迭代$counter % 3 == 2,并将与$content_array的长度一样多次地回显。
我必须说,这个循环构造不是非常健壮和可读的。考虑以一种更“最佳实践”和可伸缩的方式重写您的循环。我不知道您的用户/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>';
}我认为应该这样做;)
https://stackoverflow.com/questions/70578646
复制相似问题