【问题标题】:Repeater inside Group ACF WordpressGroup ACF Wordpress 中的中继器
【发布时间】:2019-02-03 01:23:56
【问题描述】:

我正在使用 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; ?>

【问题讨论】:

  • 请发布最少的代码
  • 我做了,但它消失了。
  • 什么是“lank”文本或图像或其他字段
  • 这是转发器“arsmodeller_lankar”中的子字段
  • 试试这个,the_field('lank');

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


【解决方案1】:

在嵌套的 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;
?>

【讨论】:

  • 它不输出任何东西。甚至没有回显“hello world”;
  • 您能确认start_horlurar 是父中继器名称,arsmodeller_lankar 是其下的子中继器吗?
  • lank 字段似乎在start_horlurar 下而不是arsmodeller_lankar 下?
  • 似乎horlur是它们之间的一个组字段,你能确认一下层次结构吗 - start_horlurar(中继器)>horlur(组)>arsmodeller_lankar(中继器)?
  • 是的! :) 因此问题的标题
【解决方案2】:

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

<?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() 的嵌套循环的详细信息。

【讨论】:

    【解决方案3】:

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

    对于我的组 ('group') 和我的中继器 ('repeater'),使用 ('subfield') 的子字段,这就是我所做的。

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

    超级简单,而且更干净。如果需要,您可以添加您的“if”语句,而不是控制我的必填字段。

    我发现这种方法对快速和肮脏很重要。我对几乎所有事情都使用组,以便能够为后端的自定义字段创建更好的用户体验。我的大多数自定义字段都是分组并获取参数,我希望它尽可能少的代码和尽可能干净。

    如果你们发现此方法有任何问题,请告诉我,尤其是在性能方面。

    【讨论】:

    • 这对我有用,而且比双循环更整洁
    猜你喜欢
    • 2019-03-30
    • 2014-07-17
    • 1970-01-01
    • 2020-06-19
    • 2020-04-25
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多