WordPress教程网
WordPress教程网

WordPress实现用户自动登录的方法

当途网960

所有带前端用户注册功能的wordpress主题中都会遇到这样一个使用场景:用户填写用户名及密码等信息注册成功后,都希望同时能自动登录。\"WordPress实现用户自动登录的方法那么,怎么实现这个自动登录呢?本文为你分享2个自动登录的方法,大家可以自由使用。方法一:利用Wp_signon()函数来实现介绍下该函数先~函数描述:根据给定的凭证来验证用户身份。用法:1参数:$Credentials(数组)(选填)用户的登录信息。注意:如果不填写该项的话,该函数会默认使用$_POST变量的值(键名为\"log\", \"pwd\" 和 \"rememberme\");默认值:无$Secure_cookie(布尔)(选填)是否使用安全cookie。默认值:无返回值:(对象)成功的话返回WP_User,失败的话返回WP_Error。举例:将以下代码应用到你的WordPress中即可实现自动登录功能:if (!is_user_logged_in()) {$creds = array();$creds[\'user_login\'] = \'example\'; // 用户名是example,自行修改$creds[\'user_password\'] = \'plaintextpw\'; // 密码是plaintextpw$creds[\'remember\'] = true;$user = wp_signon( $creds );if ( is_wp_error($user) )echo $user->get_error_message();}if (!is_user_logged_in()) {$creds = array();$creds[\'user_login\'] = \'example\'; // 用户名是example,自行修改$creds[\'user_password\'] = \'plaintextpw\'; // 密码是plaintextpw$creds[\'remember\'] = true;$user = wp_signon( $creds );if ( is_wp_error($user) )echo $user->get_error_message();}方法二:无需密码的方式通过上面的介绍我们可以看出wp_signon()函数是需要知道用户的用户名及密码的;而现在有种更好的实现方法,不需要知道帐号密码,只需指定用户名即可,实现代码如下:if (!is_user_logged_in()) {$user_login = \'example\'; // 用户名是example,自行修改// 获取用户id$user = get_userdatabylogin($user_login);$user_id = $user->ID;// 登录wp_set_current_user($user_id, $user_login);wp_set_auth_cookie($user_id,true);do_action(\'wp_login\', $user_login);}if (!is_user_logged_in()) {$user_login = \'example\'; // 用户名是example,自行修改// 获取用户id$user = get_userdatabylogin($user_login);$user_id = $user->ID;// 登录wp_set_current_user($user_id, $user_login);wp_set_auth_cookie($user_id,true);do_action(\'wp_login\', $user_login);}在这里用到了这个函数:wp_set_auth_cookie(),这个函数的用法跟wp_signon()函数类似:wp_set_auth_cookie( $user_id, $remember, $secure ),第一个参数是用户ID,第二个是是否记住用户,第三个是是否启用安全cookie~特别说明1. 如果将方法一或方法二的代码示例,直接放到主题的functions.php中,那么只要打开前台任何页面,就会自动登录到你设置的用户名example下。本文只是提供自动登录的方法,至于怎么使用用就得看你具体的需求了。2. 请注意 wp_signon() 函数里的$secure_cookie参数和 wp_set_auth_cookie() 函数里面的$secure参数:请把这2个参数留空,不要设置值!龙笑天下在启用SSL的时候,就因为设置该参数为false,导致出现了一个奇怪“无解”(找遍了网络都没找到真正的解决方法... 都在说什么cookie的路径问题....)的现象,现将该现象描述如下以供遇到同样问题的你来参考:a. 通过主题前台的弹出框输入用户名及密码方式来登录的话,前台能正常登录,前台页面能正常浏览,一切“如常”;让人崩溃的问题就来了:一旦你打开后台页面,你会被强制退出登录,就是进不了wordpress的后台...b. 通过wordpress的后台默认登录页面(wp-login.php)或者通过社交按钮来登录的话,则能够自由出入前后台~通过搜索,使用了网上的几乎所有方法,都无果... 只能确认是cookie的问题~后来通过比较a和b两种情形的cookie发现了问题所在,唯一区别就是:a情形里cookie名是:wordpress_396e26512564256ed830cb7909cc751e,b情形里cookie名是:wordpress_sec_396e26512564256ed830cb7909cc751e。大家应该发现问题了吧,cookie名里多与少了一个sec的区别。最后通过定位主题的登录函数,发现了是这个函数的问题:wp_signon()。该函数如果第2个参数如果留空不设置值话,它就会自动判断站点是否启用了https,从而自动判断是否使用安全cookie。而我的主题里却把第2个参数值定死为false了......最最后,友情提示主题制作者,一定要注意下这些个小细节啊~ PS:当时启用https后,因为这个问题,简直想屎的心都有了~~~~~~~~~

标签: 用户自动登录