2020-06-28 / 1340阅 / 悠然
删除特定子字段的值。
此功能可以在have_rows()
循环内部或外部使用。在内部使用时,当前行将用于删除子字段值。在外部使用时,必须指定行和父对象以定位正确的值位置。
delete_sub_field($selector, [$post_id]);
$selector
(字符串|数组) (必需) 子字段名称或键,或祖先和行号的数组。$post_id
(混合) (可选) 保存值的帖子ID。默认为当前帖子。(布尔)成功删除时为true,失败则为false。
本示例说明如何遍历Repeater字段并从每一行中删除其子字段值之一。
if( have_rows('repeater') ) {
while( have_rows('repeater') ) {
the_row();
delete_sub_field('caption');
}
}
本示例说明如何在have_rows()
循环外部删除子字段值。在此,为$selector
参数提供了一个包含字段名和行号混合的数组。该数组应从左到右读取,父子关系由行号分隔。
请参阅有关索引偏移量的注释。
// Delete "caption" within the first row of "repeater".
delete_sub_field( array('repeater', 1, 'caption') );
该delete_sub_field()
函数还可用于在have_rows()
循环内部和外部定位嵌套子字段。本示例说明如何使用这两种方法删除嵌套的子字段函数。
// Loop over parent rows.
if( have_rows('repeater') ) {
while( have_rows('repeater') ) {
the_row();
// Loop over child rows.
if( have_rows('sub_repeater') ) {
while( have_rows('sub_repeater') ) {
the_row();
// Delete nested sub field value.
delete_sub_field('sub_sub_field');
}
}
}
}
// target a nested sub field directly.
delete_sub_field( array('repeater', 1, 'sub_repeater', 2, 'sub_sub_field') );
当使用特定的行号作为子字段的目标时,请注意,行号从1开始而不是0。这意味着第一行的索引为1,第二行的索引为2,依此类推。
要从0开始索引,请像这样使用row_index_offset设置。
add_filter('acf/settings/row_index_offset', '__return_zero');