每 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>';
}
我认为应该这样做 ;)
我想包装每 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>';
}
我认为应该这样做 ;)