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

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

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

В настоящее время мы используем код ниже, чтобы показать пользователю, не вошедшему в систему, пустой экран с сообщением “Вы не можете получить доступ к этой странице”, однако вместо этого мы хотим перенаправить их на страницу входа (https://craftyquiz.com/my-account/).

Есть ли способ сделать это?

if( !function_exists('tf_restrict_access_without_login') ):

    add_action( 'template_redirect', 'tf_restrict_access_without_login' );

    function tf_restrict_access_without_login(){

        /* получить ID текущей страницы или поста */
        $page_id = get_queried_object_id();

        /* добавить списки ID страниц или постов для ограничения */
        $behind_login_pages = [ 58875 ];

        if( ( !empty($behind_login_pages) && in_array($page_id, $behind_login_pages) ) && !is_user_logged_in() ):

            wp_redirect( $url );
            exit;

        endif;
    }

endif;

/* добавьте код в активную тему в этом файле functions.php */
add_action( 'template_redirect', function() {

if( ( !is_page('login') ) ) {

    if (!is_user_logged_in() ) {
        wp_redirect( site_url( '/login' ) );        // Пример: страница входа             
        exit();
    }

}

});

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

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

Шаг 1: Определение целевых страниц

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

Шаг 2: Реализация редиректа

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

if (!function_exists('tf_restrict_access_without_login')) {

    add_action('template_redirect', 'tf_restrict_access_without_login');

    function tf_restrict_access_without_login() {
        /* Получение текущего ID страницы или поста */
        $page_id = get_queried_object_id();

        /* Список ID страниц для ограничения доступа */
        $behind_login_pages = [58875]; // Добавьте сюда другие ID, если необходимо

        /* Проверка: если пользователь не авторизован и страница в списке ограниченных */
        if (in_array($page_id, $behind_login_pages) && !is_user_logged_in()) {
            $login_url = 'https://craftyquiz.com/my-account/'; // Укажите URL страницы входа
            wp_redirect($login_url);
            exit;
        }
    }

}

Шаг 3: Исключение страницы входа из проверки

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

add_action('template_redirect', function() {
    if (!is_user_logged_in() && !is_page('my-account')) { // Замените 'my-account' на слаг вашей страницы входа
        wp_redirect('https://craftyquiz.com/my-account/');
        exit;
    }
});

Советы по улучшению производительности

  1. Кэширование: Учтите, что применение редиректов может негативно сказаться на производительности сайта, особенно при использовании кэширования. Предпочтительно использовать функции кэширования, которые учитывают аутентификацию пользователя.

  2. SEO: Убедитесь, что редиректы не создают конфликтов с индексацией ваших страниц поисковыми системами. Используйте статус HTTP 302 для временных редиректов на страницу входа.

  3. Логирование: Возможно, стоит реализовать логику для отслеживания попыток доступа к ограниченным страницам. Это может помочь в дальнейшей настройке безопасности вашего сайта.

Заключение

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

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

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