WP Job Manager:职位提交表单添加姓名字段及赋值报错问题
WP Job Manager注册表单添加姓名字段并同步用户元数据问题
问题场景
我使用WP Job Manager搭建网站,用户发布职位时可通过输入邮箱和用户名完成注册,提交职位后账户会被创建,用户进入职位预览页。我需要在注册表单中添加First Name和Last Name两个字段,提交后将这两个字段的值填充到用户元数据first_name和last_name中。
已实现的字段添加代码
我已成功添加表单字段,代码如下:
add_filter( 'wpjm_get_registration_fields', 'add_first_last_name_fields', 999999 ); function add_first_last_name_fields( $reg_fields ){ if( empty( $reg_fields ) ){ return []; } $generate_username_from_email = job_manager_generate_username_from_email(); $use_standard_password_setup_email = wpjm_use_standard_password_setup_email(); $account_required = job_manager_user_requires_account(); $registration_fields = []; if ( job_manager_enable_registration() ) { $registration_fields['create_account_email'] = [ 'type' => 'text', 'label' => esc_html__( 'Your email', 'wp-job-manager' ), 'placeholder' => __( 'you@yourdomain.com', 'wp-job-manager' ), 'required' => $account_required, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Just used to populate value when validation failed. 'value' => isset( $_POST['create_account_email'] ) ? sanitize_text_field( wp_unslash( $_POST['create_account_email'] ) ) : '', ]; if ( ! $generate_username_from_email ) { $registration_fields['create_account_username'] = [ 'type' => 'text', 'label' => esc_html__( 'Username', 'wp-job-manager' ), 'required' => $account_required, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Just used to populate value when validation failed. 'value' => isset( $_POST['create_account_username'] ) ? sanitize_text_field( wp_unslash( $_POST['create_account_username'] ) ) : '', ]; } $registration_fields['first_name'] = [ 'type' => 'text', 'label' => esc_html__( 'First Name / Organisation', 'wp-job-manager' ), 'placeholder' => __( 'First Name', 'wp-job-manager' ), 'required' => $account_required, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Just used to populate value when validation failed. 'value' => isset( $_POST['first_name'] ) ? sanitize_text_field( wp_unslash( $_POST['first_name'] ) ) : '', ]; $registration_fields['last_name'] = [ 'type' => 'text', 'label' => esc_html__( 'Last Name', 'wp-job-manager' ), 'placeholder' => __( 'Last Name', 'wp-job-manager' ), 'required' => $account_required, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Just used to populate value when validation failed. 'value' => isset( $_POST['last_name'] ) ? sanitize_text_field( wp_unslash( $_POST['last_name'] ) ) : '', ]; if ( ! $use_standard_password_setup_email ) { $registration_fields['create_account_password'] = [ 'type' => 'password', 'label' => esc_html__( 'Password', 'wp-job-manager' ), 'autocomplete' => false, 'required' => $account_required, ]; $password_hint = wpjm_get_password_rules_hint(); if ( $password_hint ) { $registration_fields['create_account_password']['description'] = $password_hint; } } } return $registration_fields; }
错误的用户数据处理代码
我尝试用以下代码同步用户元数据,但运行时出现错误:
add_filter ('job_manager_create_account_data', 'create_additional_registration_fields'); function create_additional_registration_fields($new_user) { $new_user = [ 'user_login' => $registration_fields['create_account_username'], 'user_email' => $registration_fields['create_account_email'], 'first_name' => $registration_fields['first_name'], 'last_name' => $registration_fields['last_name'], ]; return $new_user; }
错误提示
Cannot create a user with an empty login name.
问题分析与解决方案
错误原因
- 处理函数中直接覆盖了传入的
$new_user数组,丢失了WP Job Manager自动生成的核心用户数据(如user_login、user_email) - 引用了未定义的
$registration_fields变量,无法获取正确的用户名和邮箱值,导致登录名为空
修正后的代码
保留字段添加函数不变,替换用户数据处理函数为:
add_filter( 'job_manager_create_account_data', 'create_additional_registration_fields' ); function create_additional_registration_fields( $new_user ) { // 从POST中安全获取并处理姓名字段值 if ( isset( $_POST['first_name'] ) ) { $new_user['first_name'] = sanitize_text_field( wp_unslash( $_POST['first_name'] ) ); } if ( isset( $_POST['last_name'] ) ) { $new_user['last_name'] = sanitize_text_field( wp_unslash( $_POST['last_name'] ) ); } // 保留原有核心用户数据,仅添加/修改姓名字段 return $new_user; }
说明
- 基于传入的
$new_user数组进行修改,不覆盖原有核心数据,避免空登录名错误 - 使用
sanitize_text_field和wp_unslash处理用户输入,符合WordPress安全规范 - 兼容手动输入用户名和自动从邮箱生成用户名两种模式
内容的提问来源于stack exchange,提问作者cannydare
相关产品推荐
相关产品推荐

