Как мы обрабатываем кэширование страниц в WordPress?
Я использую WP-Rocket на нашем сайте, но кэширование страниц (та же проблема возникает, если использовать только Cloudflare APO) мешает обновлению счётчика комментариев. Я проверил это, отключив WP-Rocket (и/или APO), опубликовал ответ в соответствующей теме форума, и счётчик комментариев обновился, но нестабильно. То есть не мгновенно и не так, как можно было бы ожидать.
Поэтому я нашёл рекомендацию добавить веб-хук, что позволило счётчику комментариев обновляться надёжно.
Однако при включённом кэшировании страниц (WP-Rocket или APO) и использовании этого веб-хука счётчики комментариев не обновляются, когда кто-то публикует новый ответ в форуме.
Суть, похоже, в том, что веб-хук не корректно запускает среду WordPress для обновления кэшированной страницы. Кажется, у нас какая-то ошибка в матрице.
Редактирование: Ещё один момент. У меня настроен WP-Rocket так, что когда я авторизован в WordPress, страницы для меня не кэшируются. Кэширование работает только для посетителей. Я заметил, что вижу обновление счётчиков комментариев, когда авторизован в WordPress, но не вижу их, когда зашёл как посетитель в режиме инкогнито.
У меня нет никаких ответов, но, как вы знаете, WP Rocket пытается создавать статические копии и исключать вызовы PHP и базы данных. Это не кэш в строгом смысле, но, конечно, это вопрос определения.
Однако в наши дни у WP Rocket много проблем, и, возможно, это одна из самых незначительных, если говорить о самом сайте WordPress.
Привет, @Brandon007, спасибо за объяснение вашей проблемы. Как я понимаю:
Плагин WP Discourse корректно обновляет количество комментариев.
Кэш WP Rocket не очищается при обновлении количества комментариев.
Я изменил заголовок вашего сообщения с «Плагин WP Discourse не обновляет количество комментариев» на «Вебхук комментариев WP Discourse не вызывает обновление кэша WP Rocket».
Основной ответ на ваш вопрос заключается в том, что это ожидаемое поведение. Плагин WP Discourse не имеет специальной интеграции с WP Rocket и не планирует добавлять её в обозримом будущем.
Однако я всё ещё могу помочь вам, добавив действие, которое срабатывает после того, как обратный вызов вебхука синхронизации комментариев обновит метаданные темы (где хранится количество комментариев). Затем вы сможете написать собственный обратный вызов действия для выполнения любой необходимой очистки кэша. Подойдёт ли такой вариант для вашей ситуации?
Скорее всего, я запутаюсь в написании кода, ха-ха, но если у тебя получится это реализовать, это выведет меня и других пользователей на шаг ближе к цели. Похоже, что с твоим изменением можно будет добавлять пользовательский код для очистки кэша любого плагина кэширования. Это было бы даже лучше, чем фокусироваться на одном продукте. Я пробовал несколько методов кэширования на тестовом сайте, и все они давали одинаковый результат.
Так что продолжай в том же духе, мой добрый сэр, и спасибо за ответ.
Привет, Энгус. Не уверен, что ты всё ещё занимаешься этим?
Хочу добавить ещё кое-что. В нативном WordPress при использовании любого вида кэширования страниц после оставления комментария кэш страницы автоматически очищается. Неужели нет способа заставить WP Discourse имитировать такое поведение?
Привет, Брэндон, да, в следующем выпуске появится действие для этого, которое позволит вам очищать кэш WP Rocket (или любой другой кэш) в данной ситуации.
Я не ставлю под сомнение ваши или чьи-либо ещё навыки, и я не знаю всего, но не может быть фразы «или любой кэш», потому что, насколько мне известно, WP Rocket требует других инструментов для очистки своего кэша, чем W3 Total Cache, чем WP Fastest Cache, чем любой обратный прокси, такой как Varnish или Nginx.
И если WP Rocket создаёт статическую часть страницы, то есть кэш, из раздела комментариев, то это гораздо более серьёзная проблема, чем просто очистка кэша.
Это верно. Плагин WP Discourse просто предоставляет действие, которое позволяет сайтам, использующим различные решения для кэширования, очищать кэш в нужное время, применяя метод, подходящий для используемого решения кэширования.
Энгус, спасибо за уточнение. Есть ли какая-то общая информация о дате выпуска?
Также возможно ли, чтобы WP-Discourse имитировал поведение нативных комментариев WordPress? Имеется в виду, что решения для кэширования страниц имеют опцию, позволяющую очищать кэш страницы, когда пользователь оставляет новый комментарий на этой странице. Это было бы идеально.
Как вы знаете, на сегодняшний день мы не можем использовать кэширование страниц ни в каком виде, если хотим, чтобы счетчик комментариев обновлялся. Это большой недостаток для пользователей WordPress, которые озабочены оптимизацией скорости.
Надеюсь, что нет, потому что такое поведение было бы ужасной тратой ресурсов и фактически стало бы решающим фактором против использования.
Я всё ещё немного запутался, потому что в нативном WordPress нет кэширования, а WP Rocket определённо не очищает весь свой так называемый кэш после комментария.
Я забыл упомянуть, что ваше обновление действительно решило проблему! Спасибо.
Для тех, кто сталкивается с этой проблемой при использовании WP-Rocket вместе с WP-Discourse. Следующий код (вставьте в файл функций WordPress) обеспечит очистку кэша для соответствующей записи Discourse после добавления комментария.
if( function_exists( 'rocket_clean_post' ) ){
add_action( 'wpdc_after_webhook_post_update', 'bulk_rocket_clean_post');
}
function bulk_rocket_clean_post(array $ids){
foreach ($ids as $id) {
rocket_clean_post($id);
}
}