Как отключить кеширование отдельного участка кода на странице WP Rocket?

Ссылка скопирована
1 ответ

Есть 9 секций на странице. В 1 секцию приходят уникальные данные с back-end для каждого пользователя.
Можно как-то отключить кеширование именно этой секции?
Или кеширование работает по принципу тумблера — либо кеширует страницу, либо нет.

Дополнительно:

Ответы:

https://stackoverflow.com/questions/56389269/how-t...

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

WP Rocket кэширует HTML страницы целиком. Отключить кэширование «только одной PHP-секции» внутри уже закэшированной страницы штатно нельзя: когда страница отдана из кэша, PHP-код этой секции уже не выполняется. Поэтому логика «страница кэшируется, а один блок каждый раз генерируется сервером» для WP Rocket напрямую не работает.

Есть три рабочих варианта:

  1. Исключить всю страницу из кэша, если персональные данные критичны.
  2. Оставить страницу в кэше, а уникальный блок подгружать AJAX-запросом после загрузки.
  3. Использовать edge-side includes/фрагментный кэш, но это уже зависит от серверной инфраструктуры, а не от WP Rocket.

Для WordPress чаще всего выбирают AJAX. В HTML оставляете контейнер:

<div id="user-dynamic-block" data-nonce="...">Загрузка...</div>

<div id="user-dynamic-block" data-nonce="...">Загрузка...</div>

На фронте запрашиваете данные:

fetch('/wp-admin/admin-ajax.php?action=user_dynamic_block')
  .then(function (response) { return response.text(); })
  .then(function (html) {
    document.getElementById('user-dynamic-block').innerHTML = html;
  });

fetch('/wp-admin/admin-ajax.php?action=user_dynamic_block') .then(function (response) { return response.text(); }) .then(function (html) { document.getElementById('user-dynamic-block').innerHTML = html; });

На сервере:

add_action('wp_ajax_user_dynamic_block', function () {
    if (!is_user_logged_in()) {
        wp_die('');
    }
 
    echo wp_kses_post(render_user_dynamic_block(get_current_user_id()));
    wp_die();
});

add_action('wp_ajax_user_dynamic_block', function () { if (!is_user_logged_in()) { wp_die(''); } echo wp_kses_post(render_user_dynamic_block(get_current_user_id())); wp_die(); });

Если данные зависят от авторизованного пользователя, убедитесь, что WP Rocket не кэширует страницы для logged-in users, либо что сам блок действительно приходит отдельным AJAX-запросом. Для корзин, личных кабинетов, цен для клиента и похожих персональных блоков часто безопаснее исключить страницу из кэша полностью.

И главное: не выводите персональные данные в закэшированный HTML. Иначе один пользователь может увидеть данные другого, если кэш будет создан в неподходящий момент.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно