Cómo interceptar antes de W3 Total Cache en WordPress

12 jun 2012, 14:16:25
Vistas: 633
Votos: 1

Estoy desarrollando un plugin donde necesito leer el user agent y enviar cabeceras personalizadas para ciertos agentes. El problema es que muchos usuarios tienen el plugin W3 Total Cache instalado, y lo que ocurre es que cuando tengo una condición que envía la cabecera personalizada, esta se envía para TODOS los user agents, sin ejecutar mi lógica de eventos. Intenté cargar mi evento con...

add_action('plugins_loaded','MY_PLUGIN::checkRules',-1000000000);

...pero W3 Total Cache intercepta las solicitudes mediante .htaccess u otro mecanismo. Necesito hacerlo en el nivel plugins_loaded porque requiero consultar get_option.

¿Cómo puedo hacer que mi plugin funcione incluso cuando W3 Total Cache está activo?

0
Todas las respuestas a la pregunta 2
0

Si el almacenamiento en caché está habilitado a nivel del archivo .htaccess, hay poco que puedas hacer a través de un plugin para interceptar ese tráfico. En su lugar, deberías elaborar un conjunto de reglas recomendadas para .htaccess que funcionen tanto con W3TC como con tu plugin, ya sea para permitir el paso del tráfico o para devolver contenido en caché.

Quizás, genera automáticamente una lista de agentes de usuario para los que deseas enviar cabeceras personalizadas y utiliza esa lista—a través de .htaccess—para permitir que cierto tráfico evite la caché.

13 jun 2012 15:12:46
0

Encontré la solución. Será necesario estar en la versión 0.9.2.4 o superior de W3TC porque fue con esa versión que probé mis cambios de código. Tuve que editar el código de mi plugin y buscar cualquier lugar donde estuviera verificando los agentes de usuario y devolviendo una respuesta. Justo antes de devolver una respuesta negativa (como 404 o 403, lo que el usuario haya configurado en los ajustes del plugin), tuve que agregar esta línea:

define('DONOTCACHEPAGE', true);

También ten en cuenta que la forma en que estaba verificando los agentes de usuario era mediante una llamada a función a través de un evento de WordPress que estaba bastante arriba en la cadena de eventos:

add_action('plugins_loaded','MYPLUGIN::checkAgents',-1000000000);

Este add_action() es importante porque necesita estar alto en la cadena donde se carga antes de que se cargue el plugin W3TC. Por eso se usó un número de prioridad negativo.

11 sept 2012 21:17:54