if(!is_user_logged_in()) возвращает true на 404 странице
Я управляю закрытым сайтом только для зарегистрированных пользователей.
Для этого я проверяю, авторизован ли пользователь:
// запрещаем доступ неаутентифицированным пользователям
if( !is_user_logged_in() ) {
wp_redirect('/wp-login.php');
//auth_redirect();
exit;
}
Но иногда система внезапно меня разлогинивает, и я не мог понять, где искать проблему. Это происходило случайно, поэтому было сложно отладить.
Теперь я обнаружил, что if( !is_user_logged_in() )
возвращает true на 404 странице.
Я всё ещё разбираюсь, но хочу узнать ваше мнение: это нормальное поведение или баг? Вы можете подтвердить, наблюдается ли такое же поведение в вашей установке? У меня последняя версия WordPress.
Обновление:
Всё ещё не могу понять: в footer.php
if(!is_user_logged_in()) {
echo '123';
}
выводит 123, но моя функция не делает редирект... но всё равно это странно и вызывает проблемы с другим плагином.
Плагин выглядит так:
add_action("wp_footer","bpln_store_ids");
function bpln_store_ids(){
if(!is_user_logged_in())
return;
?>
<div id="bpln-notification-ids" style="display:none;">
<?php echo join(",",bpln_get_all_notification_ids(bp_loggedin_user_id()));?>
</div>
<?php
}
Поскольку проверка возвращает true, фактическое содержимое никогда не отображается.

Попробуйте этот код для редиректа:
add_action( 'template_redirect', function(){
// запрещаем доступ неавторизованным пользователям
if( ! is_user_logged_in() )
{
wp_redirect( home_url( '/wp-login.php' ), 302 );
exit();
}
});
Это позволит просматривать сайт только вошедшим пользователям.
Обычно уже слишком поздно делать редирект напрямую в файле header.php
, поэтому лучше использовать хук, который срабатывает до отправки HTTP-заголовков, например хук template_redirect
. Также важно, чтобы template_redirect
не срабатывал на странице wp-login.php
.

Не отмечу это как правильный ответ, поскольку вопрос другой, но это интересно и может быть моей другой проблемой, попробую это

Хорошо, попробовал, но не работает — когда я выхожу из системы, сайт все равно просматривается. Может быть, template_redirect — неверное действие?

Это странно, я успешно протестировал это на чистой установке. Возможно, у вас есть плагин/тема, который мешает работе? Может быть, у вас проблемы с куками, вы пробовали проверить в другом браузере или очистить кеш? Вы можете попробовать использовать более ранний хук, например wp
, но если вы хотите использовать хуки типа init
, вам нужно изменить приведенный код, чтобы избежать бесконечного цикла. Какой результат выдает home_url( '/wp-login.php' )
? Что произойдет, если заменить wp_redirect()
на die( 'Stop!' )
? Вы добавили этот код в файл functions.php
?
