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.
Не отмечу это как правильный ответ, поскольку вопрос другой, но это интересно и может быть моей другой проблемой, попробую это
CBeTJlu4ok
Хорошо, попробовал, но не работает — когда я выхожу из системы, сайт все равно просматривается. Может быть, template_redirect — неверное действие?
CBeTJlu4ok
Это странно, я успешно протестировал это на чистой установке. Возможно, у вас есть плагин/тема, который мешает работе? Может быть, у вас проблемы с куками, вы пробовали проверить в другом браузере или очистить кеш? Вы можете попробовать использовать более ранний хук, например wp, но если вы хотите использовать хуки типа init, вам нужно изменить приведенный код, чтобы избежать бесконечного цикла. Какой результат выдает home_url( '/wp-login.php' )? Что произойдет, если заменить wp_redirect() на die( 'Stop!' )? Вы добавили этот код в файл functions.php?
birgire