Сайты на заказ > Сайтостроение > Login Redirection в WordPress с помощью Code Snippets

Login Redirection в WordPress с помощью Code Snippets

В этой статье представлены фрагменты кода для

  1. перенаправление пользователей, не являющихся администраторами, после их входа на домашнюю страницу, позволяя администраторам идти туда, куда они обычно попадут.
  2. перенаправление незарегистрированных посетителей на определенную страницу, когда они пытаются посетить любую страницу на внешнем интерфейсе. Вошедшие в систему пользователи и администраторы продолжат видеть все страницы в обычном режиме. Этот фрагмент можно использовать для настройки режима Coming Soon или Maintenance без плагина.
  3. предотвращение перехода пользователей на страницу wp-login, когда они вводят неправильные или пустые учетные данные в форме входа в WordPress.

Все следующие фрагменты можно добавить с помощью плагина, такого как Code Snippets, или в файле functions.php дочерней темы.

Login Redirection в WordPress с помощью Code Snippets

Перенаправление пользователей после входа в систему

Следующий фрагмент перенаправит пользователей без прав администратора после успешного входа на домашнюю страницу, тогда как администраторы будут перенаправлены на свою панель управления в /wp-admin.

<?php

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 the default place
			return $redirect_to;
		} else {
			return home_url();
		}
	} else {
		return $redirect_to;
	}
}

Если вы хотите, чтобы вошедшие в систему пользователи (не являющиеся администраторами) были перенаправлены после успешного входа на определенную страницу, например «Welcome», замените

return home_url();

на вот этот код.

return site_url( '/welcome/' );

В вашем случае это может быть любая другая страница или любые другие настройки постоянных ссылок. Просто подставьте нужный вам адрес.

Перенаправить посетителей, которые не вошли в систему

В задаче настройки, которую я недавно выполнял, требовалось перенаправить любого пользователя, который не вошел в систему, на страницу /sign-in (где присутствует форма входа).

  • Пользователи, которые не вошли в систему, должны быть перенаправлены на страницу /sign-in.
  • страница регистрации является исключением, т. е. посетители должны иметь возможность посетить ее.
  • /wp-admin и /wp-login.php не должны быть затронуты.

Вот код для вышеизложенного:

<?php 

add_action( 'template_redirect', 'redirect_if_user_not_logged_in' );
function redirect_if_user_not_logged_in() {
	if ( is_admin() || is_user_logged_in() || is_page( array( 'sign-in', 'register' ) ) ) { // add whitelist here
		return;
	}

	nocache_headers();
	wp_safe_redirect(  site_url( '/sign-in/' ) );

	exit;
}

Перенаправление, когда форма входа в WP отправляется с неправильными или пустыми учетными данными

<?php

add_action( 'wp_login_failed', 'wpse_15633_redirectFailedLoginForm', 10, 2 );
/**
 * Check if the authentication of the supplied username and password has failed.
 *
 * @param string $username Username or email address
 * @param WP_Error $error A WP_Error object with the authentication failure details.
 */
function wpse_15633_redirectFailedLoginForm( $username, $error ) {
	$redirect_url = add_query_arg([
		'errors' => $error->get_error_code(),
	], site_url( 'login', 'login_post' ));

	if ( wp_safe_redirect( $redirect_url ) ) {
		exit;
	}
}

add_filter( 'authenticate', 'wpse_15633_redirectMissingDataLoginForm', 10, 3 );
/**
 * Check if the login form is missing the username or password.
 *
 * @param WP_User $user Logged-in user
 * @param string $username Username or email address
 * @param string $password User password
 * @return WP_User
 */
function wpse_15633_redirectMissingDataLoginForm( $user, $username, $password ) {
	$errors = [];
	empty( trim( $password ) ) && $errors[] = 'password_empty';
	empty( trim( $username ) ) && $errors[] = 'username_empty';

	if ( ! empty( $errors ) ) {

		$redirect_url = add_query_arg([
			'errors' => join( ',', $errors ),
		], site_url( 'login', 'login_post' ) );

		if ( wp_safe_redirect( $redirect_url ) ) {
			exit;
		}
	}

	return $user;
}

Добавить комментарий

Ваш адрес email не будет опубликован.

[sc name="yandex"][/sc]
Copyright © 2021, GuruSite24. Копирование материалов сайта запрещено.
menu-circlecross-circle