中继器

上次更新日期:2024年4月15日

说明

Repeater字段为重复内容提供了一个简洁的解决方案——想想幻灯片、团队成员、CTA贴片等等。

此字段类型充当一组子字段的父字段,这些子字段可以反复重复。使这种字段类型如此特殊的是它的多功能性。在中继器中可以使用任何类型的字段,重复次数也没有限制(👨‍💻 除非在字段设置中定义)。

屏幕截图

设置

  • 子字段
    定义一组可重复的子字段。

  • 已折叠
    通过指定要显示的单个子字段,可以折叠每一行。

  • 最小行数
    设置所需数据行数的限制。

  • 最大行数
    设置允许的数据行数限制。

  • 布局
    定义子字段外观的布局样式。
    :子字段显示在表中。标签将显示在表格标题中。
    :子字段以块的形式依次显示。
    :子字段显示在两列表中。标签将出现在第一列。

  • 按钮标签
    “添加行”按钮中显示的文本。

  • 分页
    在ACF 6.0中添加。定义在管理员中编辑转发器时,转发器是否应仅加载每页的设定行数。如果禁用(默认情况下为禁用),则将立即加载所有行。此设置不会影响模板的使用或通过REST API返回的结果。注释:当前在灵活内容和其他转发器字段中不支持此设置。在这些情况下,此设置将不显示。

  • 每页行数
    在ACF 6.0中添加。设置启用“分页”设置时页面上显示的行数。

模板使用

Repeater字段将返回一个行数组,其中每一行都是包含子字段值的数组。

为了获得最佳的开发人员体验,我们创建了一些额外的函数,专门用于循环行和访问子字段值。这些是have_rows(_R),低(_R),获取子字段、和子字段功能。

基本回路

此示例演示了如何循环通过Repeater字段并加载子字段值。

<?php(电话)//检查行是否存在。if(have_rows('repeater_field_name'))://在行之间循环。while(have_rows('repeater_field_name')):the_row();//加载子字段值。$sub_value=get_sub_field('sub_field');//做一些事情,但如果直接输出,请确保转义该值。。。//结束循环。endwhile;//没有价值。其他://做点什么。。。endif;

显示滑块

此示例演示了如何循环通过Repeater字段并为基本图像滑块生成HTML。

<?php if(have_rows('slides')):?><ul class=“幻灯片”><?php while(have_rows('slides')):the_row();$image=获取子字段('image');?><li><?php-echo wp_get_attachment_image($image,'full');?><p><?php-echo acf_esc_html(get_sub_field('caption'));?></p>(第页)</li><?php endwhile;?></ul><?php-endif;?>

Foreach循环

此示例演示了如何使用foreach循环手动循环Repeater字段值。

<?php(电话)$rows=获取字段('repeater_field_name');if($rows){echo'<ul class=“slides”>';foreach($rows作为$row){$image=$row['image'];echo“<li>”;echo wp_get_attachment_image($image,'full');echo wp_kses_post(wpautop($row[‘caption’]));echo“</li>”;}echo“</ul>”;}

嵌套循环连接

此示例演示了如何循环通过嵌套的Repeater字段并加载子字段值。

<?php(电话)/***字段结构:**-parent_repeater(中继器)*-parent_title(文本)*-child_repeater(中继器)*-child_title(文本)*/if(have_rows(“父转发器”):while(have_rows('parent_reporter')):the_row();//获取父值。$parent_title=获取子字段(“父标题”);//在子转发器行上循环。if(have_rows('child_reporter')):while(have_rows('child_reporter')):the_row();//获取子值。$child_title=获取子字段('child_ttitle');endwhile;endif;endwhile;endif;

访问第一行值

此示例演示如何从Repeater字段的第一行加载子字段值。

<?php(电话)$rows=获取字段('repeater_field_name');if($rows){$first_row=$行[0];$first_row_title=$first_ row[标题];//做点什么。。。}

您也可以使用打破中的语句have_rows()循环以随时退出。

<?php(电话)if(have_rows('repeater_field_name')){while(have_rows('repeater_field_name')){row();$first_row_title=获取子字段('title');//做点什么。。。断裂;}}

访问随机行值

此示例演示如何从Repeater字段的随机行加载子字段值。

<?php(电话)$rows=获取字段('repeater_field_name');if($rows){$index=array_rand($rows);$rand_row=$rows[$index];$rand_row_title=$rand_row[“标题”];//做点什么。。。}

编辑中继器

使用中继器字段相对简单–只需单击“添加行”按钮添加新行并编辑显示的子字段的值。

但有一些小贴士和技巧可以使使用中继器更加容易。

分页

ACF 6.0中引入的新“分页”设置有助于大型中继器,它减少了一次呈现的行数,有可能避免中继器加载或保存期间可能出现的浏览器崩溃和PHP错误。

然而,在一些情况下不支持分页。对于其他中继器或灵活内容字段中的中继器字段,不会显示分页设置。这是我们希望在不久的将来的版本中解决的问题。

分页不适用于前端表单–如果启用分页设置,在前端表单中查看时,中继器将像禁用分页的中继器一样工作。但是,通过WordPress管理员查看时,分页仍适用于同一中继器。

此外,分页目前在ACF块内部不起作用。这在将来可能会改变,但由于块将所有数据存储在post内容和DOM中的方式,分页在ACF块中无法提供很大的性能优势。

添加、插入和复制行

除了通过“添加行”按钮添加行之外,您还可以通过将鼠标悬停在行上并单击该行最右侧的“+”/“添加行“图标来插入行:

在中继器中插入行

如果在单击该图标之前按住键盘上的“Shift”键,它将变为一个图标,允许您复制该行:

中继器中的重复行按钮

如果该行已插入,它将显示在您之前悬停的行的上方。相反,如果复制该行,则将在悬停的行下方显示一个具有相同值的新行。

如果启用分页,则在保存更改之前,插入或复制的行不会显示行号。

重新排序行

无论“分页”设置如何,行都可以在中继器中重新排序。如果禁用分页,则可以将鼠标悬停在左侧的行号上,此时将显示拖放图标。

重新排序禁用分页的行

如果启用了分页,则可以单击行号以显示数字输入。输入行号并保存页面后,该行将移动到新位置。

在启用分页的情况下重新排序中继器。

相关的