我正在使用 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; ?>
我相信这个答案是正确的,但对于那些寻求通用实现的人来说似乎还不够清楚。
<?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()
循环遍历组,甚至到达中继器。
如果您查看 ACF 上的 group 文档,它会提到如何像中继器一样循环访问组。此外
have_rows()
文档 还提供了有关使用 have_rows()
嵌套循环的更多详细信息。
我发现双环很乱而且不需要。 我意识到这已经很旧了,但我只是遇到了这个问题并且不想有两个循环。
对于我的组('group')和我的中继器('repeater'),带有子字段('subfield'),这就是我所做的。
$group = get_field('group');
$repeaters = $group['repeaters'];
foreach($repeaters as $repeater) {
echo $repeater["subfield"];
}
超级简单,而且干净多了。如果需要,您可以添加“if”语句,而不是控制我的必填字段。
我发现这种方法对于快速和肮脏来说很重要。我几乎对所有事情都使用组,以便能够为后端的自定义字段创建更好的用户体验。我的大多数自定义字段都是分组并获取参数,我希望它的代码尽可能少且尽可能干净。
如果你们发现此方法有任何问题,尤其是在性能方面,请告诉我。
在嵌套的 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;
?>
我这样格式化,我觉得这样干净多了:
<?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; ?>
此代码可以与一组中的一个或两个中继器配合使用
<?php if (have_rows('your_group_name')): ?>
<?php while (have_rows('your_group_name')): the_row();
if (have_rows('your_repeater_name')): ?>
<ul>
<?php while (have_rows('your_repeater_name')): the_row();
$your_repeater_item = get_sub_field('your_repeater_item');
?>
<li><?php echo $your_repeater_item; ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
如果您在组字段中使用两个中继器,只需复制此代码两次并替换变量名称即可。我希望这段代码可以帮助别人。