Вопрос или проблема
Я пытаюсь найти способ ограничить доступ к двум конкретным страницам только для вошедших пользователей.
В настоящее время мы используем код ниже, чтобы показать пользователю, не вошедшему в систему, пустой экран с сообщением “Вы не можете получить доступ к этой странице”, однако вместо этого мы хотим перенаправить их на страницу входа (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;
}
});
Советы по улучшению производительности
-
Кэширование: Учтите, что применение редиректов может негативно сказаться на производительности сайта, особенно при использовании кэширования. Предпочтительно использовать функции кэширования, которые учитывают аутентификацию пользователя.
-
SEO: Убедитесь, что редиректы не создают конфликтов с индексацией ваших страниц поисковыми системами. Используйте статус HTTP 302 для временных редиректов на страницу входа.
-
Логирование: Возможно, стоит реализовать логику для отслеживания попыток доступа к ограниченным страницам. Это может помочь в дальнейшей настройке безопасности вашего сайта.
Заключение
Ограничение доступа к страницам для неавторизованных пользователей может значительно повысить уровень безопасности вашего сайта. Используя предложенные методы редиректа, вы можете перенаправлять пользователей на страницу входа и тем самым контролировать доступ к важной информации. Напомните пользователям, как важно авторизоваться для получения доступа к полному функционалу вашего сайта. Это не только улучшит пользовательский опыт, но и поможет в поддержании безопасности вашего проекта.