WordPress登录注册系统的优化

WordPress的登录注册系统有很多问题,不符合一般用户的使用习惯,举例来说:

(1)注册时候无法自行设置登录密码,系统将自行生成一段非常复杂的密码给用户,根本无法记忆,只能再次重置密码。

(2)用户注册成功后,首次登录将跳转到一个无用的(对于博客网站来说)个人资料界面,其实对于博客网站来说,用户之所以登录,无非是想更方便的进行评论,与作者或者其他读者交流,再无其他。

(3)用户登陆后,网站页面上方会出现一栏无用的黑色工具栏,非常影响网站视觉效果。

(4)WordPress网站的登录注册系统,通常是放在小工具中的“功能”选项中,功能中通常还包括RSS订阅与WordPress官网链接,这对一般用户来说也是多余的。

在官网的插件库中找了一圈,终于发现一款相对来说不错的登录系统优化插件Theme My Login(https://wordpress.org/plugins/theme-my-login/),这款插件主要有以下几个特点:

  • 可以完美融合进当前所用主题,无需重新设置css样式。
  • 可自定义用户登录方式,邮箱登录/用户名登录/邮箱或用户名登录。
  • 可自定义注册/找回密码通知邮件。
  • 可使用户自定义登录密码。
  • 可自定义url重定向,例如用户登录/登出后跳转的链接。
  • 可自定义用户链接。
  • 支持reCAPTCHA验证码系统(大陆用不了这个系统,所以可忽略这个功能)。
  • 支持用户安全设定,如1小时内五次登录失败封号处理。
  • 可自定义用户验证方式。

reCAPTCHA:CMU(卡耐基梅隆大学)设计一个强大的验证码系统,让电脑去向人类求助。具体做法是:将OCR(光学自动识别)软件无法识别的文字扫描图传给世界各大网站,用以替换原来的验证码图片;那些网站的用户在正确识别出这些文字之后,其答案便会被传回CMU。

插件安装完成后,左侧工具栏会出现一个名为“TML”的设置区,点击General选项,进入设置页面,插件默认勾选了Enable “theme-my-login.css”和Login Type中的Username or E-mail选项,这两个选项建议保留勾选。

下方的拓展模块默认均未勾选,建议勾选如下几个:

theme my login插件配置

保存更改后TML设置一栏便会新增相应设置。

1)redirection建议设置如下(因为注册用户默认为订阅者,所以设置订阅者即可):

theme my login设置

referer选项即登录后跳转到用户之前所浏览页面,这样比较符合用户使用习惯。

登出后跳转到网站首页,在第三栏中填入网站首页即可。

2)User Links即此处的用户可点击链接:

theme my login设置

建议设置如下:

theme my login设置

同样,只设置订阅者即可,此处设置本来是保有Dashboard仪表盘和profile用户资料的链接的,但由于WordPress的用户资料系统做的并不好,且该页面一般与网站风格不一致,所以我不建议保留此项链接(个人建议,还是要根据实际应用场景选择),相应的,我将其替换为我的CSDN博客链接。站长可根据自己需要在此添加网站其他部分的链接,例如:进入论坛,资料下载。

3)Security设置,建议保留默认设置即可。

theme my login设置

如何用户在1个小时尝试五次登录失败,即锁定该账号24小时。

4)Moderation设置

theme my login设置

从上到下依次为:无需验证、需邮件验证、需管理员验证,可根据需要选择。

5)如何添加登录注册功能到网站页面。

theme my login插件安装完成后,会自动添加到“外观-小工具”中,名为“theme my login”,自定义添加位置即可。添加完成后效果如下:

侧边栏效果

相比之前的登录功能还是要简单人性化很多。

6)如何修改注册登录页面。

theme my login安装完成后,wordpress的页面中会出现几个相关的页面,即用户点击相应功能时显示的页面。如需修改,编辑即可。例如若用户名只支持英文字母、下划线、数字,应当给予用户相应提示,可编辑注册页面:

7)用户登录后页面上方出现工具栏影响视觉效果。

这本是WordPress为用户提供方便的一种设计,但实际场景中,这样的设计并不友好,因为该工具栏实际上只对网站管理者有用。虽然我们可以在用户-编辑中手动为用户选择不显示此工具栏,但这样并不实际。WordPress的插件库中同样也有个插件,能方便地完成此项设置。

WP Custom Admin Bar(https://wordpress.org/plugins/wp-custom-admin-bar/

设置如下:

工具栏设置

仅管理员可见工具栏,或管理员、作者、投稿者可见工具栏,订阅者不可见。

8)重置密码邮件中链接无效的问题。

这个问题由来已久,直至最新版本的WordPress4.7.3依然存在(也许在英文世界中这个问题不是问题,所以官方也一直没有解决),仔细观察邮件中的重置密码链接就会发现链接无效的原因是邮件系统自动将<http://………..>中右侧的>也算入到有效链接中去了,即<http://………..>

打开WordPress根目录中的wp-login.php文件,在332行左右有如下代码片段:

WordPress重置密码链接无效的原因

去掉链接的美化修饰符<>即可。

即将

$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";

改为

$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;

即可。

但这种方法在升级WordPress后会实效,因为新的wp-login文件会覆盖旧的文件。所以推荐在当前主题的function.php文件中重新定义重置密码函数,仿照wp-login中的写法,在function.php的文件末尾添加如下代码:

function reset_password_message( $message, $key ) {
	if ( strpos($_POST['user_login'], '@') ) {
		$user_data = get_user_by('email', trim($_POST['user_login']));
	} else {
		$login = trim($_POST['user_login']);
		$user_data = get_user_by('login', $login);
	}
	$user_login = $user_data->user_login;
	$msg = __('该账号请求重置密码:'). "\r\n\r\n";
	$msg .= network_site_url() . "\r\n\r\n";
	$msg .= sprintf(__('用户名:%s'), $user_login) . "\r\n\r\n";
	$msg .= __('如果这不是您本人的要求,请忽略本邮件。') . "\r\n\r\n";
	$msg .= __('要重置您的密码,请点击下方链接:'). "\r\n\r\n";
	$msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
	return $msg;
}
add_filter('retrieve_password_message', reset_password_message, null, 2);

9)用户首次登录跳转到用户资料页面,如何自定义用户首次登录跳转页面。

如果用户注册成功后能够自动登录,这样的体验应当是更完美的,另外,由于WordPress的用户资料中心做的并不好,所以能够让用户登录号跳转到网站首页或指定页面,当然是更直接的。

为此,我们可以在当前主题的function.php文件中的第一个<?php后添加如下代码:

function auto_login_new_user( $user_id ) {
	wp_set_current_user($user_id);
	wp_set_auth_cookie($user_id);
	wp_redirect( home_url() );  // 跳转到首页,可自定义
	exit;
}
add_action( 'user_register', 'auto_login_new_user');

关于 “WordPress登录注册系统的优化” 的 2 个意见

发表评论

电子邮件地址不会被公开。