简体   繁体   中英

Update Username (User_Login) on Email Change (WooCommerce)

A number of questions have been raised on StackOverflow in regards to using email address as username when registering via My Account . I have the working code included below.

$this->loader->add_filter('pre_user_login', $plugin_public, 'audp_wc_register_email_as_username' );

public function audp_wc_register_email_as_username( $user_login ) {

    if ( isset ( $_POST['email'] ) ) {

        $user_login = $_POST['email'];

    }

    return $user_login;

}

I've updated my own question with the following code to update the user_login details.

$this->loader->add_action( 'woocommerce_save_account_details', $plugin_public, 'audp_wc_update_email_and_username', 20, 1 );

public function audp_wc_update_email_and_username() {

    if ( isset( $_POST['account_email'] ) ) {

        global $wpdb;

        $user_id = get_current_user_id();
        $new_login = $_POST['account_email'];

        // Update user user_login
        $wpdb -> update( $wpdb -> users, 
            array( 'user_login' => $new_login, 'user_nicename' => $new_nicename ), 
            array( 'ID' => $user_id )
        );      
    }   
    // Update nickname
    update_user_meta( $user_id, 'nickname', $new_login );
}

I've updated the question to include the full code. Because we are dealing with user_login we cannot use wp_update_user(), I have used the class description above, but the below code is standard (non-class) functions.

add_action( 'woocommerce_save_account_details', 'audp_wc_update_email_and_username', 20, 1 );
function audp_wc_update_email_and_username() {

if ( isset( $_POST['account_email'] ) ) {

    global $wpdb;

    $user_id = get_current_user_id();
    $new_login = $_POST['account_email'];

        // Update user user_login
        $wpdb -> update( $wpdb -> users, 
            array( 'user_login' => $new_login, 'user_nicename' => $new_nicename ), 
            array( 'ID' => $user_id ) 
        );

    // Update nickname
    update_user_meta( $user_id, 'nickname', $new_login );
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM