如何使用wp_signon()使用Wordpress中用户表以外的数据登录?

The*_*der 5 php mysql wordpress

我正在使用一个称为成员的单独表来保留注册信息。我正在使用wp_hash_password($ password)存储密码。

但是,当我想使用wp_signon()登录时,它将发送0作为响应。我检查了wp-includes / user.php来找到有关wp_signon()的详细信息,发现它使用user_login和user_password作为那里的表列名称。

在我的成员表中,我有member_username和member_password。

如何使用members表使其可行?

仅供参考,我正在使用wp_users表登录仪表板,但对于用户端,我正在使用wp_members存储所有成员信息。

谢谢

vij*_*oli 0

如果您有一个自定义表wp_members来存储用户信息并且想要使用wp_signon()它,则需要进行一些自定义,因为 wp_signon() 旨在与默认wp_users表一起使用。

// Add this code to your theme's functions.php file or a custom plugin

add_filter('authenticate', 'custom_authenticate', 10, 3);

function custom_authenticate($user, $username, $password) {
    $member = get_member_by_username($username);

    if (!$member) {
        // Member not found
        return new WP_Error('invalid_username', __('Invalid username'));
    }

    if (wp_check_password($password, $member->member_password)) {
        // Password is correct
        return new WP_User($member->ID);
    } else {
        // Password is incorrect
        return new WP_Error('incorrect_password', __('Incorrect password'));
    }
}

function get_member_by_username($username) {
    // Implement a function to retrieve member details by username from your custom table
    // Example: $member = $wpdb->get_row($wpdb->prepare("SELECT * FROM wp_members WHERE member_username = %s", $username));

    // Return the member object
    // Example: return $member;
}
Run Code Online (Sandbox Code Playgroud)

在 custom_authenticate 函数中,替换get_member_by_username为您自己的函数,该函数从自定义表中获取成员详细信息。

<form action="<?php echo esc_url(site_url('wp-login.php', 'login_post')); ?>" method="post">
    <!-- Your login form fields -->
</form>
Run Code Online (Sandbox Code Playgroud)

登录后自定义重定向逻辑,成功登录后您可能需要单独处理wp_signon()

$creds = array(
    'user_login'    => $username,
    'user_password' => $password,
    'remember'      => true,
);

$user = wp_signon($creds, false);

if (is_wp_error($user)) {
    // Handle login error
    echo $user->get_error_message();
} else {
    // Redirect logic here
    wp_redirect(home_url('/dashboard/'));
    exit();
}
Run Code Online (Sandbox Code Playgroud)