让WordPress支持用户名或邮箱登录

林继 WordPress 1,679 共写了252个字 (2013-07-28 8:54:55) 没有评论 打印 扫描二维码 百度未收录

本文来自:http://www.wpdaxue.com/login-with-username-or-email-address.html

允许你的WordPress站点通过用户名或邮箱登录,是提高用户体验的好方法,毕竟很多时候,用户不太记得自己注册的用户名。同时我们还要将默认的“用户名”修改为“用户名/邮箱”提示用户:

2013-7-28

将下面的代码添加到当前主题的 functions.php 文件即可

  1. //让WordPress支持用户名或邮箱登录
  2. function dr_email_login_authenticate( $user, $username, $password ) {
  3. 	if ( is_a( $user, 'WP_User' ) )
  4. 		return $user;
  5.  
  6. 	if ( !empty( $username ) ) {
  7. 		$username = str_replace( '&', '&', stripslashes( $username ) );
  8. 		$user = get_user_by( 'email', $username );
  9. 		if ( isset( $user, $user->user_login, $user->user_status ) && 0 == (int) $user->user_status )
  10. 			$username = $user->user_login;
  11. 	}
  12.  
  13. 	return wp_authenticate_username_password( null, $username, $password );
  14. }
  15. remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
  16. add_filter( 'authenticate', 'dr_email_login_authenticate', 20, 3 );
  17.  
  18. //替换“用户名”为“用户名 / 邮箱”
  19. function username_or_email_login() {
  20. 	if ( 'wp-login.php' != basename( $_SERVER['SCRIPT_NAME'] ) )
  21. 		return;
  22.  
  23. 	?><script type="text/javascript">
  24. 	// Form Label
  25. 	if ( document.getElementById('loginform') )
  26. 		document.getElementById('loginform').childNodes[1].childNodes[1].childNodes[0].nodeValue = '<?php echo esc_js( __( '用户名/邮箱', 'email-login' ) ); ?>';
  27.  
  28. 	// Error Messages
  29. 	if ( document.getElementById('login_error') )
  30. 		document.getElementById('login_error').innerHTML = document.getElementById('login_error').innerHTML.replace( '<?php echo esc_js( __( '用户名' ) ); ?>', '<?php echo esc_js( __( '用户名/邮箱' , 'email-login' ) ); ?>' );
  31. 	</script><?php
  32. }
  33. add_action( 'login_form', 'username_or_email_login' );

如果你不喜欢折腾代码,可以下载安装 WP Email Login 插件。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >