You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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;
?>

关键说明

  1. 数组收集:用$dia_list数组把所有循环中得到的$dia存起来,这样不会丢失之前的值
  2. 去重处理:用array_unique确保同一个日期日不会被设置成重复标签
  3. 一次性设置:循环结束后再调用wp_set_post_tags,把整个数组传进去,这样所有日期日都会被设置为标签
  4. 追加/替换选项:第三个参数$append设为true时会在原有标签基础上追加,设为false时会替换现有标签,你可以根据需求调整

这样修改后,所有不同的日期日都会被正确设置为文章标签啦!

内容的提问来源于stack exchange,提问作者y2k_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:52:28