Перехват до W3 Total Cache
Я разрабатываю плагин, в котором мне нужно считывать User Agent и отправлять пользовательские заголовки для определенных агентов. Однако у некоторых пользователей установлен плагин W3 Total Cache, и когда мое условие срабатывает для отправки пользовательского заголовка, этот заголовок отправляется для ВСЕХ User Agent'ов, не выполняя мою логику событий. Я попытался загрузить свое событие с помощью...
add_action('plugins_loaded','MY_PLUGIN::checkRules',-1000000000);
...но W3 Total Cache перехватывает запросы через .htaccess или другим механизмом. К сожалению, мне нужно выполнять это на уровне plugins_loaded
, потому что мне требуется выполнять запросы к get_option
.
Как я могу заставить свой плагин работать, даже если активирован W3 Total Cache?

Если кэширование включено на уровне .htaccess
, вы мало что можете сделать через плагин, чтобы перехватить этот трафик. Вместо этого вам следует разработать набор рекомендуемых правил .htaccess
, которые будут работать как с W3TC, так и с вашим плагином, чтобы либо пропускать трафик, либо возвращать закэшированный контент.
Возможно, автоматически сгенерируйте список пользовательских агентов, для которых вы хотите отправлять пользовательские заголовки, и используйте этот список — через .htaccess
— чтобы разрешить определённому трафику обходить кэш.

Я нашел решение. Необходимо использовать W3TC версии 0.9.2.4 или выше, потому что именно с этой версией я тестировал свои изменения кода. Мне пришлось редактировать код моего плагина и найти все места, где я проверяю user-agent и возвращаю ответ. Непосредственно перед тем, как вернуть отрицательный ответ (например, 404 или 403 — в зависимости от настроек плагина), я добавил эту строку:
define('DONOTCACHEPAGE', true);
Также обратите внимание, что проверка user-agent осуществлялась через вызов функции через событие WordPress, которое находится достаточно высоко в цепочке событий:
add_action('plugins_loaded','MYPLUGIN::checkAgents',-1000000000);
Этот add_action() важен, потому что он должен быть выполнен до загрузки плагина W3TC. Именно поэтому используется отрицательный приоритет.
