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选项,这两个选项建议保留勾选。

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


WordPress登录界面代码美化_WordPress登录界面代码美化

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

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


WordPress登录界面代码美化_自定义_02

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

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

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


WordPress登录界面代码美化_优化_03

建议设置如下:


WordPress登录界面代码美化_wordpress_04

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

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


WordPress登录界面代码美化_wordpress_05

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

4)Moderation设置


WordPress登录界面代码美化_自定义_06

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

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

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


WordPress登录界面代码美化_WordPress登录界面代码美化_07

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

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

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


WordPress登录界面代码美化_wordpress_08

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

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

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

设置如下:


WordPress登录界面代码美化_自定义_09

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

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

http://………..>。

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


WordPress登录界面代码美化_wordpress_10

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

即将

$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');