组ACF Wordpress中的中继器

时间:2018-08-28 12:00:49

标签: php wordpress while-loop nested-loops advanced-custom-fields

我正在为Wordpress使用“高级自定义字段”,并试图在组内循环转发器。我得到的只是“通知:...中的数组到字符串的转换”

怎么了?我该如何解决?

<?php if( have_rows('start_horlurar') ): while ( have_rows('start_horlurar') ) : the_row();  ?>

<?php $horlur = get_sub_field('horlur'); ?>

<?php if( have_rows( $horlur['arsmodeller_lankar']) ): while ( have_rows($horlur['arsmodeller_lankar']) ) : the_row();  ?>

<?php echo get_sub_field('lank'); ?>

<?php endwhile; endif; ?>

<?php endwhile; endif; ?>

3 个答案:

答案 0 :(得分:2)

在嵌套的ACF转发器中,您无需添加父转发器的引用-只需添加转发器名称即可。尝试这样。

<?php
if( have_rows('start_horlurar') ): while ( have_rows('start_horlurar') ) : the_row(); 
    echo get_sub_field('horlur');
    if( have_rows('arsmodeller_lankar') ): while ( have_rows('arsmodeller_lankar') ) : the_row(); 
        echo get_sub_field('lank');
    endwhile; endif;
endwhile; endif;
?>

更新的代码: 您也需要像“ ACF中继器”一样循环“ ACF组”字段。尝试这样。

<?php
if( have_rows('start_horlurar') ): while ( have_rows('start_horlurar') ) : the_row(); 
    if( have_rows('horlur') ): while ( have_rows('horlur') ) : the_row();       
        if( have_rows('arsmodeller_lankar') ): while ( have_rows('arsmodeller_lankar') ) : the_row(); 
            echo get_sub_field('lank');
        endwhile; endif;
    endwhile; endif;
endwhile; endif;
?>

答案 1 :(得分:1)

我相信答案是正确的,但是对于那些寻求通用实现的人来说似乎还不够清楚。

<?php

if( have_rows('your_group') ): while ( have_rows('your_group') ) : the_row(); 

    if( have_rows('your_repeater') ): while ( have_rows('your_repeater') ) : the_row();       

        echo get_sub_field('repeater_sub_field');

    endwhile; endif;

endwhile; endif;

?>

通常对于组,您可以使用以下方法来到达特定的子字段:

<?php 

$group_var = get_field['your_group']; 

$group_sub_field_var = $group_var['group_sub_field']

?>

但是,似乎在中继器嵌套在组中的情况下,您无法使用此策略,而是被迫首先使用have_rows()遍历一个组,甚至到达中继器。

如果您查看group documentation on ACF,它会提到如何像中继器一样循环遍历一个组。此外,have_rows() documentation还提供了有关使用have_rows()的嵌套循环的详细信息。

答案 2 :(得分:1)

我发现双循环很杂乱,不需要。 我意识到这已经很老了,但是我只是遇到了这个问题,并且不想有两个循环。

对于我的小组('group')和我的中继器('repeater'),子领域为('subfield'),这就是我所做的。

     $group = get_field('group');
     $repeaters = $group['repeaters'];
     foreach($repeaters as $repeater) {
         echo $repeater["subfield"];
       }

超级简单,而且干净得多。您可以根据需要添加“ if”语句,而不必控制我的必填字段。

我发现此方法对于快速清理工作很重要。我将组用于几乎所有内容,以便能够为后端的自定义字段创建更好的用户体验。我的大多数自定义字段都在组中并使用args,我希望它尽可能少的代码并尽可能干净。

让我知道你们是否发现此方法有任何问题,特别是在性能方面。