Вопрос или проблема
Я написал плагин для своего сайта, где у меня есть проблема: “после того как пользователь войдет в систему, если он выйдет, затем опять, если он нажмет кнопку назад в браузере, то предыдущая страница снова отображается вместо страницы входа”. Я попробовал следующий код, но он не работает.
<script>
window.onhashchange = function() {
<?php if( ! is_user_logged_in()) { $this->tewa_login(); } ?>
}
<script>
Мой код для выхода из системы ниже:
if ( is_user_logged_in() ) {
$data .= '<li><a class="add-new" href="'. wp_logout_url() .'" class="btn btn-primary" >'.$this->icon_sign_out.' Выйти</a></li>';
}
Может ли следующий код работать?
function my_redirect(){
<script>
location.reload();
</script>
exit();
}
add_filter('wp_logout','my_redirect');
Я думаю, что эта проблема полностью связана с браузером, а не с сервером. Я думаю, что просто обновление страницы решит проблему. Я использовал ‘wp_logout_url’ для выхода пользователя. Как это сделать, может кто-то подсказать? Заранее спасибо.
Попробуйте использовать wp_redirect после выхода. Вот пример, как его использовать здесь.
add_action( 'wp_logout', 'auto_redirect_external_after_logout');
function auto_redirect_external_after_logout(){
wp_redirect( 'http://redirect-url' );
exit();
}
если вы хотите обновить (а не перенаправить на другую страницу), используйте ‘get_permalink()’
это в документации…
<a href="https://wordpress.stackexchange.com/questions/250191/<?php echo wp_logout_url( get_permalink() ); ?>">Выйти</a>
Ответ или решение
Чтобы решить вашу проблему с обновлением страницы после выхода пользователя из системы в WordPress, рассмотрим эффективные методы применения функции wp_logout_url()
и правильного управления редиректами и обновлениями страницы.
Проблема
Когда пользователь выходит из системы, нажав кнопку "Выход", и затем нажимает кнопку "Назад" в браузере, он видит предыдущую страницу вместо страницы входа. Это поведение связано с кэшированием браузера и тем, как ведет себя серверное управление сессиями.
Решение
Для корректного отображения страницы после выхода пользователя следует воспользоваться функцией wp_redirect()
после выхода, что позволит избежать кэширования старой версии страницы и всегда направлять пользователя на актуальную страницу. В дополнение к этому, можно обновить страницу через wp_logout_url()
, добавляя текущую страницу в качестве параметра для обновления.
Пример кода
- Использование
wp_redirect
в функции выхода:
add_action('wp_logout', 'redirect_after_logout');
function redirect_after_logout() {
wp_redirect(home_url()); // Замените home_url() на нужный адрес
exit();
}
Этот код выполняет редирект на домашнюю страницу после выхода из системы. Вы можете заменить home_url()
на URL, на который хотите перенаправить пользователя.
- Использование
wp_logout_url
для обновления страницы:
Чтобы обновить страницу при выходе, используйте wp_logout_url()
с текущим URL:
if ( is_user_logged_in() ) {
$data .= '<li><a class="add-new btn btn-primary" href="' . wp_logout_url(get_permalink()) . '">' . $this->icon_sign_out . ' Logout</a></li>';
}
В этом случае, это создаст ссылку для выхода, которая после выхода пользователя перенаправит его на ту же страницу, где он находился, обеспечивая обновление страницы.
- Управление кэшированием в браузере:
Для предотвращения кэширования страниц попробуйте добавить заголовки HTTP, которые сообщают браузеру не кэшировать страницы. Добавьте следующий код в ваш плагин или файл functions.php:
add_action('template_redirect', 'disable_cache');
function disable_cache() {
if (!is_user_logged_in()) {
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
}
Заключение
Эти методы обеспечат более чистое решение для вашей задачи с выходом и обновлением страницы. Используйте wp_redirect()
для перенаправления после выхода, и добавляйте актуальную информацию в wp_logout_url()
, чтобы гарантировать, что пользователи будут видеть актуальный контент.
Помимо этого, регулярное обновление страниц и управление кэшированием — это хорошая практика при разработке веб-приложений, особенно для приложений с аутентификацией.
Если у вас возникнут дополнительные вопросы или проблемы с реализацией, не стесняйтесь обращаться за помощью.