Вопрос или проблема
Пандемия изменила мою роль в компании, так что теперь я занимаюсь всей разработкой на WordPress, хотя у меня нет никакой подготовки по WordPress. Не стесняйтесь добавлять комментарии о неразумии моего начальника, если хотите!
В любом случае, что я пытаюсь сделать, так это создать страницу, защищенную паролем. Посетитель, знающий пароль, может ввести его и просмотреть содержимое. Пока что все хорошо. Я это выяснил и даже смог настроить внешний вид экрана входа, чтобы он не выглядел так ужасно, как по умолчанию.
Тем не менее, клиент попросил меня настроить страницу так, чтобы, если посетитель покинет страницу, ему нужно было заново ввести пароль, чтобы вернуться к содержимому. Кажется, есть довольно много возможных решений, но я не могу заставить ни одно из них работать. Код, который я постоянно нахожу, выглядит как-то так:
function wpse_191369_post_password_expires() {
return time() + 10; // Истекает через 10 секунд
}
add_filter( 'post_password_expires', 'wpse_191369_post_password_expires' );
Я вставил это в functions.php своей дочерней темы и протестировал в режиме инкогнито на Chrome. Я могу один раз войти и просмотреть содержимое, но если я попытаюсь открыть новую вкладку или окно в режиме инкогнито, я все равно могу получить доступ к содержимому без ввода пароля.
Я уверен, что решение болезненно очевидно, но я здесь новичок и просто блуждаю в темноте!
Заранее спасибо за любые советы!
На заднем плане (в административной области) вы можете установить защиту паролем для каждой страницы отдельно. Перейдите сюда, чтобы узнать об этом.
Далее, фильтр, о котором вы говорите, правильный. Просто верните значение, когда он истечет в отношении сейчас.
add_filter('post_password_expires', function($time) { return time() + 1; // СЕЙЧАС + 1 секунда });
Что касается нажатия кнопки “назад”, вы получаете кэшированную страницу, которая была сохранена на вашем локальном компьютере. Чтобы обойти это, вам нужно сказать локальному компьютеру отменить старую страницу и получить ее с сервера. Обсуждение этого уже состоялось. Но вам все равно нужно выяснить, на каком этапе процесса WordPress вы хотите подключиться. В зависимости от того, как вы выводите заголовки, вы можете использовать wp_head
крючок, чтобы вывести через HTML, или init
крючок для использования метода header()
метод. Черт, вы даже можете использовать wp_headers
крючок и просто вернуть целый массив заголовков.
После того как вы это сделали, вам придется очистить кэш вашего локального компьютера, чтобы получить новую сгенерированную страницу с новой информацией заголовка с сервера (и не использовать вашу старую страницу на локальном компьютере). Удачного кодирования!
Ответ или решение
Требование к посетителю вводить пароль при каждом посещении страницы: Решение для WordPress
В условиях современного мира, когда цифровые технологии играют ключевую роль в бизнесе, защита контента становится одной из приоритетных задач для многих компаний. Если вы столкнулись с необходимостью защитить определённую страницу вашего сайта на WordPress и обеспечить, чтобы каждый новый визит требовал повторного ввода пароля, вы на правильном пути. В этой статье мы подробно рассмотрим, как реализовать данное требование.
Задача: Пояснение ситуации
Ваша компания, из-за пандемии, переходит на удалённый режим работы, и вы находитесь в роли разработчика WordPress без специальной подготовки. Вы уже настроили парольную защиту для страницы, но ваш клиент хочет, чтобы пароль повторно вводился каждый раз при посещении страницы, даже если посетитель использует кнопку "Назад" браузера или открывает новую вкладку.
Решение: Настройка времени действия пароля
Для того чтобы реализовать эту функциональность, вам нужно будет использовать фильтр post_password_expires
, который позволяет изменять срок действия пароля. Вы правильно заметили, что код, снижающий срок действия пароля до нескольких секунд, является подходящим:
add_filter('post_password_expires', function($time) {
return time() + 1; // Текущий момент + 1 секунда
});
Этот код, помещённый в файл functions.php
вашей дочерней темы, будет указывать, что пароль истекает через одну секунду после его ввода, что вынудит пользователя вводить пароль заново при каждом новом посещении страницы.
Настройка заголовков для предотвращения кэширования
Однако, чтобы решить проблему с кэшированием, когда пользователи могут видеть закэшированную версию страницы и не вводить пароль повторно, вам потребуется указать заголовки, запрещающие кэширование. Для этого вы можете использовать хук wp_head
или хук init
для добавления необходимых заголовков в каждую страницу вашего сайта. Пример кода, который вы можете использовать, чтобы отключить кэширование, выглядит следующим образом:
add_action('init', function() {
if (is_page('slug-your-password-protected-page')) { // Замените на слаг вашей защищенной страницы
header("Cache-Control: no-cache, no-store, must-revalidate"); // Устанавливает заголовок кэширования
header("Pragma: no-cache");
header("Expires: 0");
}
});
Где slug-your-password-protected-page
— это слаг вашей страницы, которую вы хотите сделать защищенной паролем.
Очистка кэша
После внесения изменений, не забудьте очистить кэш вашего браузера, чтобы проверить новое поведение страницы. Иногда кэш браузера может запоминать старые версии страниц, и изменения не будут видны до его очистки.
Заключение
Таким образом, вы можете настроить ваш сайт на WordPress так, чтобы пароль на защищённой странице был действителен только для каждого нового посещения. Сначала вы устанавливаете короткий срок действия пароля, а затем управляете заголовками кэширования, чтобы предотвратить доступ к закэшированным версиям страницы. Это решение удовлетворяет запрос вашего клиента и обеспечивает необходимую защиту контента.
Если у вас есть дальнейшие вопросы или трудности, не стесняйтесь обращаться за поддержкой в сообщество WordPress или к профессиональным разработчикам. Удачи в вашем проекте!