Перехват до W3 Total Cache

12 июн. 2012 г., 14:16:25
Просмотры: 633
Голосов: 1

Я разрабатываю плагин, в котором мне нужно считывать 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?

0
Все ответы на вопрос 2
0

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

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

13 июн. 2012 г. 15:12:46
0

Я нашел решение. Необходимо использовать 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. Именно поэтому используется отрицательный приоритет.

11 сент. 2012 г. 21:17:54