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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:14:55