Opposite is endless darkness

如何自定义wordpress登录界面?

2023.02.21

Wordpress自身的登陆界面非常简洁,但是在实践中往往不能适合所有人的要求。本文讲解如何无代码优化美化自定义登陆后台.

通过Oxygen创建新的页面。新的页面就作为我们自定义的登陆页面。设计好改页面,并添加login-form组件。预计会出现登陆之后没有跳转到wp-admin页面;输入账号密码错误没有填出错误信息。

插件准备

  • Code Snippets (插件市场可下载)
  • Oxygen Bulider

创建新的页面作为登陆页面

添加代码

下方所有代码通过CodeSnippets插件填写

//Redirect Login Page 重定向默认登陆页面到新建页面

function redirect_login_page() {
    $login_url  = home_url( '/login/' );
    $url = basename($_SERVER['REQUEST_URI']); // get requested URL
    isset( $_REQUEST['redirect_to'] ) ? ( $url   = "wp-login.php" ): 0; // if users ssend request to wp-admin
    if( $url  == "wp-login.php" && $_SERVER['REQUEST_METHOD'] == 'GET')  {
        wp_redirect( $login_url );
        exit;
    }
}
add_action('init','redirect_login_page');
//Prevent redirection on failed login 阻止失败登陆之后跳转到默认登陆页面

add_action( 'wp_login_failed', 'login_failed_wrong_data' );
/**
 * Prevent redirection to /wp-login.php after user login fails when username and password were provided.
 * @param  string $username Username or email address.
 */
function login_failed_wrong_data( $username ) {
	// Check the page where login attempt is coming from.
	$referrer = $_SERVER['HTTP_REFERER'];
	
	// Check that we are not on the default login page + other things.
	if ( ! empty( $referrer ) && ! strstr( $referrer, 'wp-login' ) && ! strstr( $referrer, 'wp-admin' ) && $username != null ) {
		// Check if we don't already have a failed login attempt.
		if ( ! strstr( $referrer, '?login=failed' ) ) {
			// Redirect to the same login page and append a query string.
			wp_redirect( $referrer . '?login=failed' );
		} else {
			// Redirect to the same login page.
			wp_redirect( $referrer );
		}

		exit;
	}
}

add_action( 'authenticate', 'login_failed_no_data' );
/**
 * Prevent redirection to /wp-login.php after user login fails when username or/and password is/are empty.
 */
function login_failed_no_data( $user ) {
	// Check the page where login attempt is coming from.
	$referrer = $_SERVER['HTTP_REFERER'];

	$error = false;

	// Check if inputs are empty - these have to match with your input "name" attributes.
	if ( $_POST['log'] == '' || $_POST['pwd'] == '' ) {
		$error = true;
	}

	// Check that we're not on the default login page + other things.
	if ( ! empty( $referrer ) && ! strstr( $referrer, 'wp-login' ) && ! strstr( $referrer, 'wp-admin' ) && $error ) {
		// Make sure we don't already have a failed login attempt.
		if ( ! strstr( $referrer, '?login=failed' ) ) {
			// Redirect to the same login page and append a query string.
			wp_redirect( $referrer . '?login=failed' );
		} 
		else {
			// Redirect to the same login page.
			wp_redirect( $referrer );
		}

		exit;
	}
}
//Redirect user after successful login 成功之后重定向到指定页面

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
/**
 * Redirect user after successful login.
 *
 * @param string $redirect_to URL to redirect to.
 * @param string $request URL the user is coming from.
 * @param object $user Logged user's data.
 * @return string
 */
function my_login_redirect( $redirect_to, $request, $user ) {
    // is there a user to check?
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        // check for admins.
        if ( in_array( 'administrator', $user->roles ) ) {
            // redirect them to /wp-admin.
            return admin_url();
        } else {
            return home_url();
        }
    } else {
        return $redirect_to;
    }
}
//Redirect user to homepage after logging out 退出之后跳转到首页

add_filter( 'logout_redirect', 'wpdd_logout_redirect', 10, 3 );
function wpdd_logout_redirect( $redirect_to, $requested_redirect_to, $user ) {
    return home_url();
}

复制模版到页面

插件市场搜索ERROPiX Hydrogen Paste安装激活

复制下方代码到新建页面

eyJzb3VyY2UiOiJodHRwczovL294eWdlbjIubG9jYWwiLCJjb21wb25lbnQiOlt7ImlkIjoyLCJuYW1lIjoiY3Rfc2VjdGlvbiIsIm9wdGlvbnMiOnsiY3RfaWQiOjIsImN0X3BhcmVudCI6MTAwMDAzLCJzZWxlY3RvciI6InNlY3Rpb24tMi01MzIiLCJvcmlnaW5hbCI6eyJoZWlnaHQtdW5pdCI6InZoIiwiaGVpZ2h0IjoiODAiLCJjb250YWluZXItcGFkZGluZy10b3AiOiIwIiwiY29udGFpbmVyLXBhZGRpbmctbGVmdCI6IjAiLCJjb250YWluZXItcGFkZGluZy1yaWdodCI6IjAiLCJjb250YWluZXItcGFkZGluZy1ib3R0b20iOiIwIiwic2VjdGlvbi13aWR0aCI6ImZ1bGwtd2lkdGgifSwiYWN0aXZlc2VsZWN0b3IiOmZhbHNlLCJtZWRpYSI6eyJ0YWJsZXQiOnsib3JpZ2luYWwiOnsiaGVpZ2h0LXVuaXQiOiJhdXRvIn19fX0sImNoaWxkcmVuIjpbeyJpZCI6MywibmFtZSI6ImN0X25ld19jb2x1bW5zIiwib3B0aW9ucyI6eyJjdF9pZCI6MywiY3RfcGFyZW50IjoyLCJzZWxlY3RvciI6Im5ld19jb2x1bW5zLTMtNTMyIiwib3JpZ2luYWwiOnsiaGVpZ2h0LXVuaXQiOiIlIiwiaGVpZ2h0IjoiMTAwIn0sImFjdGl2ZXNlbGVjdG9yIjpmYWxzZX0sImNoaWxkcmVuIjpbeyJpZCI6NCwibmFtZSI6ImN0X2Rpdl9ibG9jayIsIm9wdGlvbnMiOnsiY3RfaWQiOjQsImN0X3BhcmVudCI6Mywic2VsZWN0b3IiOiJkaXZfYmxvY2stNC01MzIiLCJvcmlnaW5hbCI6eyJ3aWR0aCI6IjUwIiwid2lkdGgtdW5pdCI6IiUiLCJiYWNrZ3JvdW5kLWltYWdlIjoiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL3JhbmRvbS8xNjAweDkwMCIsImJhY2tncm91bmQtc2l6ZSI6ImNvdmVyIiwiYmFja2dyb3VuZC1yZXBlYXQiOiJuby1yZXBlYXQiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLWxlZnQtdW5pdCI6IiUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLWxlZnQiOiI1MCIsImJhY2tncm91bmQtcG9zaXRpb24tdG9wLXVuaXQiOiIlIiwiYmFja2dyb3VuZC1wb3NpdGlvbi10b3AiOiI1MCIsIm92ZXJsYXktY29sb3IiOiJyZ2JhKDEwMywxNTMsMTc4LDAuNSkifSwiYWN0aXZlc2VsZWN0b3IiOmZhbHNlLCJtZWRpYSI6eyJ0YWJsZXQiOnsib3JpZ2luYWwiOnsicGFkZGluZy10b3AiOiI2MCIsInBhZGRpbmctYm90dG9tIjoiNjAifX19LCJjdF9jb250ZW50IjoiIn0sImRlcHRoIjo0fSx7ImlkIjo1LCJuYW1lIjoiY3RfZGl2X2Jsb2NrIiwib3B0aW9ucyI6eyJjdF9pZCI6NSwiY3RfcGFyZW50IjozLCJzZWxlY3RvciI6ImRpdl9ibG9jay01LTUzMiIsIm9yaWdpbmFsIjp7IndpZHRoIjoiNTAiLCJ3aWR0aC11bml0IjoiJSIsImp1c3RpZnktY29udGVudCI6ImNlbnRlciIsInBhZGRpbmctdG9wIjoiNjAiLCJwYWRkaW5nLWxlZnQiOiI2MCIsInBhZGRpbmctcmlnaHQiOiI2MCIsInBhZGRpbmctYm90dG9tIjoiNjAiLCJ0ZXh0LWFsaWduIjoibGVmdCIsImFsaWduLWl0ZW1zIjoiY2VudGVyIn0sImFjdGl2ZXNlbGVjdG9yIjpmYWxzZX0sImNoaWxkcmVuIjpbeyJpZCI6OSwibmFtZSI6ImN0X2Rpdl9ibG9jayIsIm9wdGlvbnMiOnsiY3RfaWQiOjksImN0X3BhcmVudCI6NSwic2VsZWN0b3IiOiJkaXZfYmxvY2stOS01MzIiLCJvcmlnaW5hbCI6eyJ3aWR0aC11bml0IjoiJSIsIndpZHRoIjoiMTAwIiwibWF4LXdpZHRoIjoiODAwIn0sImFjdGl2ZXNlbGVjdG9yIjpmYWxzZX0sImNoaWxkcmVuIjpbeyJpZCI6NywibmFtZSI6Im94eV9sb2dpbl9mb3JtIiwib3B0aW9ucyI6eyJjdF9pZCI6NywiY3RfcGFyZW50Ijo5LCJzZWxlY3RvciI6Il9sb2dpbl9mb3JtLTctNTMyIiwib3JpZ2luYWwiOnsiZ2xvYmFsY29uZGl0aW9ucyI6W3sibmFtZSI6IlVzZXIgTG9nZ2VkIEluIiwib3BlcmF0b3IiOjAsInZhbHVlIjoiZmFsc2UiLCJzZWFyY2hWYWx1ZSI6ImZhbHNlIn1dfSwiYWN0aXZlc2VsZWN0b3IiOmZhbHNlLCJjdF9jb250ZW50IjoiIn0sImRlcHRoIjoxfSx7ImlkIjo2LCJuYW1lIjoiY3RfY29kZV9ibG9jayIsIm9wdGlvbnMiOnsiY3RfaWQiOjYsImN0X3BhcmVudCI6OSwic2VsZWN0b3IiOiJjb2RlX2Jsb2NrLTYtNTMyIiwib3JpZ2luYWwiOnsiY29kZS1waHAiOiI8P3BocFxuXHRpZiAoIGlzc2V0KCAkX0dFVFsnbG9naW4nXSApICYmICdmYWlsZWQnID09PSAkX0dFVFsnbG9naW4nXSApIHsgPz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLW1lc3NhZ2UgbG9naW4tZXJyb3JcIj5cbiAgICAgICAgICAgIDxwPllvdXIgbG9naW4gYXR0ZW1wdCB3YXMgbm90IHN1Y2Nlc3NmdWwuIFBsZWFzZSB0cnkgYWdhaW4uPC9wPlxuICAgICAgICA8L2Rpdj5cblx0PD9waHAgfVxuPz4iLCJhb3MtZW5hYmxlIjoidHJ1ZSIsImFvcy10eXBlIjoiZmFkZS11cCIsImFvcy1kdXJhdGlvbiI6IjEwMDAiLCJ3aWR0aC11bml0IjoiJSIsIndpZHRoIjoiMTAwIiwiY29kZS1jc3MiOiIiLCJnbG9iYWxjb25kaXRpb25zIjpbeyJuYW1lIjoiVXNlciBMb2dnZWQgSW4iLCJvcGVyYXRvciI6MCwidmFsdWUiOiJmYWxzZSIsInNlYXJjaFZhbHVlIjoiZmFsc2UifV0sIm1hcmdpbi10b3AiOiIzMCIsImNvbmRpdGlvbnNwcmV2aWV3IjoiMSIsImdsb2JhbENvbmRpdGlvbnNSZXN1bHQiOmZhbHNlfSwiYWN0aXZlc2VsZWN0b3IiOmZhbHNlLCJuaWNlbmFtZSI6IkxvZ2luIEZhaWxlZCIsImN0X2NvbnRlbnQiOiIifSwiZGVwdGgiOjF9LHsiaWQiOjE2LCJuYW1lIjoiY3RfY29kZV9ibG9jayIsIm9wdGlvbnMiOnsiY3RfaWQiOjE2LCJjdF9wYXJlbnQiOjksInNlbGVjdG9yIjoiY29kZV9ibG9jay0xNi01MzIiLCJvcmlnaW5hbCI6eyJjb2RlLXBocCI6IjxwPllvdSBhcmUgY3VycmVudGx5IGxvZ2dlZCBpbi48L3A+XG48cD5DbGljayA8YSBocmVmPVwiPD9waHAgZWNobyB3cF9sb2dvdXRfdXJsKCBob21lX3VybCgpKTsgPz5cIiB0aXRsZT1cIkxvZ291dFwiPmhlcmU8L2E+IHRvIGxvZyBvdXQuPC9wPiIsImdsb2JhbGNvbmRpdGlvbnMiOlt7Im5hbWUiOiJVc2VyIExvZ2dlZCBJbiIsIm9wZXJhdG9yIjowLCJ2YWx1ZSI6InRydWUiLCJzZWFyY2hWYWx1ZSI6InRydWUifV19LCJjbGFzc2VzIjpbImxvZ2luLXN1Y2Nlc3MiLCJsb2dpbi1tZXNzYWdlIl0sImFjdGl2ZXNlbGVjdG9yIjpmYWxzZSwibmljZW5hbWUiOiJMb2dpbiBTdWNjZXNzIiwiY3RfY29udGVudCI6IiJ9LCJkZXB0aCI6MX1dLCJkZXB0aCI6NX1dLCJkZXB0aCI6NH1dLCJkZXB0aCI6NH1dLCJkZXB0aCI6M31dLCJjbGFzc2VzIjp7ImxvZ2luLXN1Y2Nlc3MiOnsib3JpZ2luYWwiOnsiYW9zLWVuYWJsZSI6InRydWUiLCJhb3MtdHlwZSI6ImZhZGUtdXAiLCJhb3MtZHVyYXRpb24iOiIxMDAwIn19LCJsb2dpbi1tZXNzYWdlIjp7Im9yaWdpbmFsIjp7fX19LCJjb2xvcnMiOnt9fQ==

保存并发布。