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存储所有成员信息。
谢谢
如果您有一个自定义表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)
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |