WordPress使用Elementor表单创建用户时ACF字段无法获取值问题
解决方案
你无法获取$company_name的核心原因是Elementor Pro表单的$record->get_formatted_data()返回的数组默认不存在acf子级结构,你可以按以下步骤排查修正:
- 先调试确认
$form_data的实际结构
在$form_data = $record->get_formatted_data();后加入以下代码,把表单提交的数据写入WordPress调试日志,确认公司名字段的实际键名:
// 需先在wp-config.php中开启WP_DEBUG_LOG模式 error_log( print_r( $form_data, true ) );
你可以在站点wp-content/debug.log文件中查看完整的$form_data结构,找到公司名字段对应的正确键。
- 推荐用更稳定的字段取值方式
不要依赖格式化后的数据,直接通过Elementor提供的get_field方法按表单字段ID取值,先在Elementor表单编辑器中给公司名字段设置自定义ID(比如设为company_name),之后用以下代码取值:
$company_field = $record->get_field( [ 'id' => 'company_name' ] ); $company_name = $company_field['value'] ?? '';
这种方式不会因为你后续修改字段Label就失效,兼容性更好。
- 修正后的完整参考代码
add_action( 'elementor_pro/forms/new_record', 'thewpchannel_elementor_form_create_new_user' , 10, 2 ); function thewpchannel_elementor_form_create_new_user($record,$ajax_handler) { $form_name = $record->get_form_settings('form_name'); // 校验表单名称 if ('Create New User' !== $form_name) { return; } $form_data = $record->get_formatted_data(); $username=$form_data['Username']; $password = $form_data['Password']; $email=$form_data['Email']; $user = wp_create_user($username,$password,$email); $user_role = new WP_User($user); $user_role->set_role('unimproved_user'); if (is_wp_error($user)){ $ajax_handler->add_error_message("创建用户失败: ".$user->get_error_message()); $ajax_handler->is_success = false; return; } $last_name=$form_data["Last Name"]; // 按字段ID取公司名,这里替换成你自己设置的表单字段ID $company_field = $record->get_field( [ 'id' => 'company_name' ] ); $company_name = $company_field['value'] ?? ''; // 更新ACF字段 update_field( 'field_6182b31388dbe', $company_name, 'user_'.$user ); // 更新用户信息 wp_update_user(array("ID"=>$user,"first_name"=>$company_name,"last_name"=>$last_name)); }
内容的提问来源于stack exchange,提问作者Sam Roberts
相关产品推荐
相关产品推荐

