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

用户注册时向ACF Repeater字段添加行的实现问题

解决Gravity Forms注册后向ACF用户Repeater字段添加记录的问题

先梳理你三段代码的核心问题:

  • 第一段:错误操作文章ID而非用户ID,且$post_id变量未定义,导致add_row调用失败;
  • 第二段:钩子绑定的函数名与实际定义不匹配(car_regs vs car_reg),且用户ID格式生成错误(直接拼接WP_User对象会得到用户名而非ID);
  • 第三段:通过邮箱获取用户ID存在重复邮箱风险,且缺少错误处理逻辑。

正确解决方案

使用gform_user_registered钩子(该钩子专为Gravity Forms用户注册成功后触发设计),直接利用钩子提供的$user_id操作ACF字段:

add_action( 'gform_user_registered_6', 'add_caryear_to_user_repeater', 10, 3 );
function add_caryear_to_user_repeater( $user_id, $feed, $entry ) {
    // 获取表单中汽车年份字段值(替换21为你的实际Gravity Forms字段ID)
    $caryear = rgar( $entry, '21' );
    
    // 空值判断,避免添加无效行
    if ( empty( $caryear ) ) {
        return;
    }
    
    // 构造Repeater行数据(替换子字段键为你的ACF子字段实际键)
    $row = array(
        'field_5aff6ca2a2def' => $caryear
    );
    
    // 向用户的Repeater字段添加行(替换主Repeater字段键为你的ACF字段实际键)
    add_row( 'field_5ac6602d483d7', $row, 'user_' . $user_id );
}

补充:支持已登录用户提交表单的场景

如果需要在用户已登录提交表单时也添加记录,可改用gform_after_submission钩子,并补充用户ID获取逻辑:

add_action( 'gform_after_submission_6', 'add_caryear_to_user_repeater_after_submit', 10, 2 );
function add_caryear_to_user_repeater_after_submit( $entry, $form ) {
    // 优先获取当前登录用户ID
    $user_id = get_current_user_id();
    
    // 未登录时,通过表单邮箱字段获取用户ID(替换3为你的邮箱字段ID)
    if ( empty( $user_id ) ) {
        $email = rgar( $entry, '3' );
        $user = get_user_by( 'email', $email );
        if ( !$user ) return; // 未找到用户则终止
        $user_id = $user->ID;
    }
    
    $caryear = rgar( $entry, '21' );
    if ( empty( $caryear ) ) return;
    
    $row = array(
        'field_5aff6ca2a2def' => $caryear
    );
    
    add_row( 'field_5ac6602d483d7', $row, 'user_' . $user_id );
}

注意:请确保代码中所有字段ID/键替换为你实际使用的Gravity Forms字段ID和ACF字段键,表单ID6也需与你的目标表单ID一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:13:22