菜鸟问题。我在ACF中设置了一个字段组,以容纳11个块的网格。的结构如下 一个包含11个子组的组,每个子组包含四个元素;一个图像,一个链接和两个文本块。
我已经写了很长时间的代码来将内容填充到页面上,并且可以工作,但是效率不高。我现在正在尝试重构代码以消除重复,但我认为我的语法让我失望。
这是工作代码:
<?php
if (have_rows('feature_grid')) {
while ( have_rows( 'feature_grid' ) ) {
the_row();
while (have_rows('grid_box_1')){
the_row();
$header1 = get_sub_field('header');
$subheader1 = get_sub_field('sub-header');
$image1 = get_sub_field('image');
$link1 = get_sub_field('link');
}
while (have_rows('grid_box_2')){
the_row();
$header2 = get_sub_field('header');
$subheader2 = get_sub_field('sub-header');
$image2 = get_sub_field('image');
$link2 = get_sub_field('link');
}
// ...etc...
}
}
?>
这是我进行重构的尝试。
<?php
for ($i=1; $i<=11; $i++){
if (have_rows('feature_grid')) {
while (have_rows('feature_grid')) {
the_row();
while (have_rows('grid_box_'.$i)) {
the_row();
$header[$i] = get_sub_field('header');
$subheader[$i] = get_sub_field('sub-header');
$image[$i] = get_sub_field('image');
$link[$i] = get_sub_field('link');
}
}
}
}
?>
实际上,这不会填充内容。我要去哪里错了?我很确定问题出在将i附加到变量的语法上,但是到目前为止,我还没有弄清楚正确语法应该是什么。
答案 0 :(得分:1)
您需要定义将在每个循环中重用的变量。
$header = 'header';
$subheader = 'subheader';
$image = 'image';
$link = 'link';
然后您可以按以下方式更改代码:
for ($i=1; $i<=11; $i++){
if (have_rows('feature_grid')) {
while (have_rows('feature_grid')) {
the_row();
while (have_rows('grid_box_'.$i)) {
the_row();
${$header.$i} = get_sub_field('header');
${$subheader.$i} = get_sub_field('sub-header');
${$image.$i} = get_sub_field('image');
${$link.$i} = get_sub_field('link');
}
}
}
}