在“高级自定义字段”中的组内迭代组

时间:2019-11-19 13:04:46

标签: php wordpress advanced-custom-fields

菜鸟问题。我在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附加到变量的语法上,但是到目前为止,我还没有弄清楚正确语法应该是什么。

1 个答案:

答案 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'); 
      }
    }
  }
}