用户注册时向ACF Repeater字段添加行的实现问题
解决Gravity Forms注册后向ACF用户Repeater字段添加记录的问题
先梳理你三段代码的核心问题:
- 第一段:错误操作文章ID而非用户ID,且
$post_id变量未定义,导致add_row调用失败; - 第二段:钩子绑定的函数名与实际定义不匹配(
car_regsvscar_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
相关产品推荐
相关产品推荐

