Как перенаправить незарегистрированных пользователей на определенную страницу?

Вопрос или проблема

Как перенаправить неавторизованных пользователей, запрашивающих определенную страницу/URL, на другую страницу/URL и отобразить сообщение, например, “только для участников”. Я знаю, что это довольно легко закодировать, используя функцию !is_user_logged_in(), но я не знаю, как это сделать, потому что я новичок в WordPress. Подскажите также, в какой файл вставлять код.

Вот 2 примера, которые вам нужно будет слегка изменить, чтобы они работали для ваших конкретных нужд.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('добавьте slug или ID страницы здесь') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Разместите этот код в файле функций вашей дочерней темы, измените ID или slug страницы и URL для перенаправления.

Вы также можете использовать следующий код:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Вы можете добавить сообщение непосредственно на страницу или, если хотите отобразить сообщение для всех неавторизованных пользователей, добавьте его в код.

http://codex.wordpress.org/Function_Reference/wp_redirect

Этот вариант будет лучше:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// продолжаем как обычно для авторизованных пользователей

Этот код перенаправляет пользователя на страницу входа. После входа в систему пользователь возвращается на защищенную страницу, к которой он пытался получить доступ изначально.

Документация здесь:

https://codex.wordpress.org/Function_Reference/auth_redirect

Вы не можете перенаправить на конкретную страницу, но каждый неавторизованный пользователь будет перенаправлен на экран входа.

<?php auth_redirect(); ?>

Справочник WordPress: auth_redirect()

Просто чтобы упомянуть другое решение.

Как мы можем вам сказать, куда это вставить, если вы не сказали нам, что и где хотите отобразить? Все записи? Страницы? Пользовательские части страниц? Извините… Похоже, мой хрустальный шар сегодня не работает.

Поскольку вы, цитирую вас: “новичок в WordPress”, вам лучше учиться, чем спрашивать прямой ответ.

Что касается места, вам следует прочитать ссылку из справочника 1. Это подскажет, в какой файл вам нужно это вставить.

Что касается как это сделать, вам следует сначала прочитать ссылки из справочника 2 и 3.

В целом это должно выглядеть примерно так:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'Только для участников';
}

Конечно, приведенный выше код нужно вставить в цикл. Вы можете создать его так сложным или простым, как захотите. Например, вместо простого текста для неавторизованных пользователей вы можете отображать целую форму регистрации или – как я бы предложил – разделенный экран, где пользователь может войти в систему (так как у пользователя может быть аккаунт, но он забыл войти) или зарегистрироваться (если у него еще нет аккаунта).

  1. Иерархия шаблонов
  2. Условные теги
  3. Цикл

Добавлено после комментариев ниже:

Чтобы перенаправить, используйте header с wp_login_url – опять же, проверьте ссылки из справочника 1 и 2 ниже:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Справочник:

  1. Header – PHP
  2. wp_login_url

Согласно этому руководству:
https://vvcares.com/blog/post/wordpress-buddypress-hide-page-from-non-members

Как скрыть страницу участников от неавторизованных пользователей?

Вот простой шаг, чтобы защитить страницы участников WordPress BuddyPress. Добавьте этот простой сниппет в файл ‘functions.php’ вашей темы. И всё..

Пример сниппета ниже перенаправит посетителя, если он не авторизован и пытается посетить чувствительные страницы BuddyPress.

Он будет перенаправлять неавторизованных пользователей, пытающихся получить доступ к частному контенту, на главную страницу вашего сайта.

// Скрыть от неавторизованных пользователей (публичных посетителей)
function bp_logged_out_page_template_redirect() {
    if ( ! is_user_logged_in() &&
            is_page( 'members' ) ||
            is_page( 'activity' ) ||
            bp_is_user()
        ) {
        wp_redirect( home_url( 'buddypressBlogPostRedirectURL' ) );
        exit();
    }
}
add_action( 'template_redirect', 'bp_logged_out_page_template_redirect' );

.

Ответ или решение

Для того чтобы перенаправить пользователей, которые не вошли в систему, на определенную страницу в WordPress, вы можете воспользоваться встроенной функциональностью данной платформы. Рассмотрим это подробнее, используя функцию !is_user_logged_in() и добавляя код в файл functions.php вашей дочерней темы.

Теория

Основной принцип заключается в применении условных тегов WordPress для проверки состояния входа пользователя. Если пользователь не авторизован, его можно перенаправить на страницу входа или любую другую страницу. Это позволяет обеспечить доступ к определённым страницам только для зарегистрированных пользователей, таким образом защищая контент сайта.

Пример

Вы можете использовать следующие примеры кода:

  1. Перенаправление на конкретную страницу:
add_action('template_redirect', 'redirect_non_logged_users_to_specific_page');

function redirect_non_logged_users_to_specific_page() {
    if (!is_user_logged_in() && is_page('slug-or-id')) {
        wp_redirect('http://www.example.com/your-page/');
        exit;
    }
}

В этом примере is_page('slug-or-id') определяет, к какой странице применяется проверка, а wp_redirect('http://www.example.com/your-page/') задает URL перенаправления.

  1. Перенаправление на страницу входа:
if (!is_user_logged_in()) {
    auth_redirect();
}

Этот вариант автоматически перенаправляет пользователя на страницу входа, и после успешной авторизации он будет возвращен на исходную страницу.

Применение

Для внедрения одного из этих решений вам необходимо:

  1. Открыть файл functions.php в директории вашей дочерней темы.
  2. Вставить соответствующий код. Обязательно замените ‘slug-or-id’ на актуальный слаг или ID страницы, а URL на необходимый для вашего случая.
  3. Сохранить изменения.

Это обеспечит автоматическое перенаправление неавторизованных пользователей, предоставляя сообщение типа «только для членов», что можно реализовать, добавив уведомление на страницу перенаправления.

Заключение

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

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

Капча загружается...