php 中继器内组ACF WordPress

scyqe7ek  于 2023-05-05  发布在  PHP
关注(0)|答案(4)|浏览(166)

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

a0x5cqrl1#

我相信这是正确的回答,但它似乎不够清楚,为那些寻找一个通用的实现。

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

wgx48brx

wgx48brx2#

在嵌套的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 Repeater一样循环ACF Group字段。像这样试试。

<?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;
?>
db2dz4w8

db2dz4w83#

我发现双循环很乱,不需要。我知道这是旧的,但我只是有这个问题,不想有两个循环。
对于我的组('group ')和我的中继器('repeater'),子字段为('subfield '),这就是我所做的。

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

超级简单,而且干净得多。如果需要,您可以添加“if”语句,并且不控制我的必填字段。
我发现这种方法对快速和肮脏很重要。我几乎在所有事情上都使用组,以便能够为后端的自定义字段创建更好的用户体验。我的大部分自定义字段都是分组和抓取参数,我希望它尽可能少的代码和干净。
如果你们发现这种方法有任何问题,请告诉我,特别是在性能方面。

kuhbmx9i

kuhbmx9i4#

我把它格式化成这样,我认为它更清晰:

<?php if(have_rows('features_repeater')): while(have_rows('features_repeater')): the_row(); if(have_rows('features_group')): while(have_rows('features_group')): the_row(); ?>
    
    <h1><?php echo get_sub_field('title'); ?></h1>

<?php endwhile; endif; endwhile; endif; ?>

相关问题