wordpress的用户功能一直不是很全面,那只是国内开发者不想花时间去开发,某些主题就有很不错的用户中心。其实wordpress提供了很多关于用户的函数,只要肯花时间,你也能做出自己想要的功能。比如本文所讲的WordPress邮箱链接验证功能,此功能可实现邮箱激活、密码重置、密码找回等。
以下代码取自大前端DUX主题,个人觉得DUX的代码比较容易看懂。
先说下WordPress邮箱链接验证功能的实现原理,首先是wordpress为指定用户生成一串校验码,这个校验码存储在_user数据表中的user_activation_key
值,然后我们就可以通过邮件,发送带有这串校验码的链接给用户,对方点击后我们取出该链接中的校验码与用户名称,再与数据库中的校验码进行比对,比对结果就是验证结果。
实现代码
生成校验码
global $wp_hasher,$wp_version; if ( empty( $wp_hasher ) ) { require_once ABSPATH . WPINC . '/class-phpass.php'; $wp_hasher = new PasswordHash( 8, true ); } if( version_compare($wp_version,'4.3.0','>=') ){ $hashed = time() . ':' . $wp_hasher->HashPassword( $key ); }else{ $hashed = $wp_hasher->HashPassword( $key ); }
wordpress版本大于4.3可以在校验码中加入时间,如果后面的校验是你自己写的函数,这里可以不管版本都加入时间,方便后面比对校验码是否失效。
更新校验码到数据库
$wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user_login ) );
其中$hashed
是前面生成的校验码,$user_login
是登录用户。
发送邮件我这里就不写了,已经写过很多了,不清楚可以看这里:WordPress发送邮件函数wp_mail使用详解
注意:校验链接应类似如下(登录用户需要url编码使用rawurlencode
函数即可):
https://域名/xxx.php?action=xxx&key=校验码&login=登录用户
比对校验码
$user = check_password_reset_key($key, $login);
$key
就是接收到的校验码, $login
是你的用户名
if ( is_wp_error($user) ) { if ( $user->get_error_code() === 'expired_key' ){ //校验码失效 } else{ //校验码错误 } exit; } //校验成功,执行下面内容
教程到此结束,不知道大家能不能看懂,我已经尽力写得清晰明了了。
评论 (4)
ripro主题的代码要怎么修改呢?