如何将Repeater子字段转换为WordPress文章标签
解决Repeater字段循环中仅设置最后一个日期日为标签的问题
我明白你现在的困扰——循环遍历Repeater字段时,本来想把每个不同的日期日('d'格式)都设为文章标签,但结果只留下了最后一个值。这是因为你在每次循环里直接调用wp_set_post_tags,而且没有把所有日期日收集起来,每次调用都会覆盖之前的标签设置。
问题根源拆解
- 你每次循环都把
$tags赋值为当前的$dia,没有把之前的日期日累加进去 wp_set_post_tags函数默认行为是替换现有标签,而不是追加,所以循环一次就覆盖一次,最后只剩最后一个值
修改后的代码方案
我们先把所有有效的日期日收集到数组里,去重后再一次性设置标签:
<?php if( have_rows('quando', $post_id) ): // 初始化空数组存储所有日期日 $dia_list = []; while( have_rows('quando', $post_id) ): the_row(); $dataCrua = get_sub_field('dia_e_hora', $post_id); $data = DateTime::createFromFormat("Y-m-d H:i:s", $dataCrua); if ( is_object($data) ) { $dia = $data->format('d'); // 将日期日加入数组(自动去重可以后面处理) $dia_list[] = $dia; } endwhile; // 对数组去重,避免重复标签 $unique_dias = array_unique($dia_list); // 一次性设置所有标签,第三个参数设为true表示追加,false表示替换现有标签 // 根据你的需求选择,这里用true的话会保留原有标签并新增这些日期标签;用false会替换成这些日期标签 if( !empty($unique_dias) ){ wp_set_post_tags( $post_id, $unique_dias, true ); } endif; ?>
关键说明
- 数组收集:用
$dia_list数组把所有循环中得到的$dia存起来,这样不会丢失之前的值 - 去重处理:用
array_unique确保同一个日期日不会被设置成重复标签 - 一次性设置:循环结束后再调用
wp_set_post_tags,把整个数组传进去,这样所有日期日都会被设置为标签 - 追加/替换选项:第三个参数
$append设为true时会在原有标签基础上追加,设为false时会替换现有标签,你可以根据需求调整
这样修改后,所有不同的日期日都会被正确设置为文章标签啦!
内容的提问来源于stack exchange,提问作者y2k_user
相关产品推荐
相关产品推荐

