注册表没有登记名字和姓氏

时间:2015-04-25 作者:PhillM23

我正在创建一个使用用户名和电子邮件输入的自定义注册表,但当我包含名字和姓氏字段时,它不允许我注册。

以下是表格:

<form id="_wb_register" action="<?php echo home_url(); ?>" method="post">

    <p>

        <label for="_wb_register_username"><?php _e(\'Username:\', \'wb\'); ?></label>
        <input type="text" name="username" id="_wb_register_username" />

    </p>

    <p>

        <label for="_wb_register_user_first_name"><?php _e(\'First Name:\', \'wb\'); ?></label>
        <input type="text" name="user_first_name" id="_wb_register_user_first_name" value="<?php echo esc_attr( wp_unslash( $first_name ) ); ?>" />

    </p>

    <p>

        <label for="_wb_register_user_last_name"><?php _e(\'Last Name:\', \'wb\'); ?></label>
        <input type="text" name="user_last_name" id="_wb_register_user_last_name" value="<?php echo esc_attr( wp_unslash( $last_name ) ); ?>" />

    </p>

    <p>

        <label for="_wb_register_email"><?php _e(\'Email:\', \'wb\'); ?></label>
        <input type="email" name="email" id="_wb_register_email" />

    </p>

    <div class="padding" style="height: 5px;"></div>

    <?php do_action(\'wb_user_panel_registration_form_bottom\'); ?>

    <p><input type="submit" value="<?php _e(\'Sign Up\', \'wb\'); ?>" class="button-primary" /></p>

</form>
以下是完成注册表后用于创建用户的函数:

add_action(\'wp_ajax__wb_register\', \'_wb_register_function\');
add_action(\'wp_ajax_nopriv__wb_register\', \'_wb_register_function\');

function _wb_register_function() {

    $return = array();
    $return[\'error\'] = false;
    $return[\'message\'] = array();

    //// VERIFIES NONCE
    $nonce = isset($_POST[\'nonce\']) ? trim($_POST[\'nonce\']) : \'\';
    if(!wp_verify_nonce($nonce, \'wb-register-nonce\'))
        die(\'Busted!\');

    //// VERIFIES CREDENTIALS
    $username = isset($_POST[\'username\']) ? trim($_POST[\'username\']) : \'\';
    $first_name = isset($_POST[\'user_first_name\']) ? trim($_POST[\'user_first_name\']) : \'\';
    $last_name = isset($_POST[\'user_last_name\']) ? trim($_POST[\'user_last_name\']) : \'\';
    $email = isset($_POST[\'email\']) ? trim($_POST[\'email\']) : \'\';

    //// MAKES SURE USER HAS FILLED USERNAME AND EMAIL
    if($email == \'\' || !is_email($email)) { $return[\'error\'] = true; $return[\'message\'] = __(\'Please type in a valid email address.\', \'wb\'); }
    if($last_name == \'\') { $return[\'error\'] = true; $return[\'message\'] = __(\'Please enter your last name.\', \'wb\'); }
    if($first_name == \'\') { $return[\'error\'] = true; $return[\'message\'] = __(\'Please enter your first name.\', \'wb\'); }
    if($username == \'\') { $return[\'error\'] = true; $return[\'message\'] = __(\'Please choose an username.\', \'wb\'); }

    ///// IF USER HAS FILLED USER, PASS, FIRST AND LAST
    if($return[\'error\'] == false) {

        $return_registration = _wb_process_user_registration($return, $email, $username, $first_name, $last_name);
        $return = $return_registration;

    }

    echo json_encode($return);

    exit;

}

//////////////////////////////////////////////////////////////////////
///// THIS FUNCTION PROCESSES REGISTRATIONS
//////////////////////////////////////////////////////////////////////

function _wb_process_user_registration($return, $email, $username, $first_name, $last_name) {

        //// CHECKS IF USERNAME EXISTS
        $user = new WP_User(\'\', $username);
        if(!$user->exists()) {

            //// CHECK FOR USERNAMES EMAIL
            $user = get_user_by(\'email\', $email);
            if(!$user) {

                $password = wp_generate_password();

                //// NOW WE CAN FINALLY REGISTER THE USER
                $args = array(

                    \'user_login\' => esc_attr($username),
                    \'first_name\' => $first_name,
                    \'last_name\' => $last_name,
                    \'user_email\' => $email,
                    \'user_pass\' => $password,
                    \'role\' => \'submitter\',

                );

                //// CREATES THE USER
                $user = wp_insert_user($args);

                if(!is_object($user)) {

                    //// MAKES SURE HE CAN"T SEE THE ADMIN BAR
                    update_user_meta($user, \'show_admin_bar_front\', \'false\');

                    $user = new WP_User($user);
当我提交注册表时,它会给我“请输入您的名字。”错误,因此至少该部分函数正在工作。我不明白为什么名字和姓氏没有被注册,而用户名和电子邮件工作正常。我有什么遗漏吗?

2 个回复
SO网友:Tom J Nowell

您处理名称的方式与其他字段不同:

//// VERIFIES CREDENTIALS
$username = isset($_POST[\'username\']) ? trim($_POST[\'username\']) : \'\';
$first_name = isset($fields[\'user_first_name\']) ? sanitize_text_field(trim($fields[\'user_first_name\'])) : \'\';
$last_name = isset($fields[\'user_last_name\']) ? sanitize_text_field(trim($fields[\'user_last_name\'])) : \'\';
$email = isset($_POST[\'email\']) ? trim($_POST[\'email\']) : \'\';
注意您如何使用$_POST[\'email\']$_POST[\'username\'], 但是你用$fields[\'user_last_name\'], 但是没有$fields 代码中的变量

作为旁注,我不会使用变量名,例如$return, 等等,它们是保留的PHP关键字,使用它们作为变量名是次优且糟糕的做法

SO网友:Enroxa Taufik
</br></br> 
<center>
    <form action=""method="POST"></br></br>   
        First Name:<input type="text" name="first_name"></br></br> 
        Last Name:<input type="text" name="last_name"></br></br>   
        <button class="" name="submit">submit</button>
    </form>
</center>

<style>
tr{border:1px solid red;}
</style>
结束