Login in use user meta value

// Allow login with National ID Number
function custom_woocommerce_authenticate_username( $user, $username, $password ) {
    if ( empty( $username ) ) {
        return $user;
    }

    if ( is_email( $username ) ) {
        $user = get_user_by( 'email', $username );
    } else {
        // Check if the username is a regular username
        $user = get_user_by( 'login', $username );

        // If not, try to get the user by national_id
        if ( ! $user ) {
            $user_query = new WP_User_Query( array(
                'meta_key'    => 'national_id',
                'meta_value'  => $username,
                'number'      => 1,
                'count_total' => false,
                'fields'      => 'ID',
            ) );

            if ( ! empty( $user_query->results ) ) {
                $user = get_user_by( 'id', $user_query->results[0] );
            }
        }
    }

    // If user is found by national_id, set the username to the user's login
    if ( $user ) {
        $username = $user->user_login;
    }

    return wp_authenticate_username_password( null, $username, $password );
}
add_filter( 'authenticate', 'custom_woocommerce_authenticate_username', 20, 3 );

Posted

in

by

Tags: