Intercettare Prima di W3 Total Cache
Sto scrivendo un plugin in cui voglio leggere lo user agent e inviare header personalizzati in base ad agent specifici. Purtroppo, molti utenti hanno il plugin W3 Total Cache e ciò che succede è che, quando ho una condizione che invia l'header personalizzato, quest'ultimo viene restituito per TUTTI gli user agent, senza eseguire la mia logica degli eventi. Ho provato a caricare il mio evento con...
add_action('plugins_loaded','MY_PLUGIN::checkRules',-1000000000);
...ma W3 Total Cache intercetta tramite .htaccess o con qualche altro meccanismo. Sfortunatamente, devo farlo al livello plugins_loaded
perché ho bisogno di interrogare get_option
.
Come posso far funzionare il mio plugin anche se W3 Total Cache è attivo?

Se la cache è abilitata a livello di .htaccess
, non c'è molto che puoi fare attraverso un plugin per intercettare quel traffico. Invece, dovresti elaborare un insieme di regole .htaccess
consigliate che funzionino sia con W3TC che con il tuo plugin, per consentire il passaggio del traffico o restituire il contenuto in cache.
Forse, potresti generare automaticamente una lista di user agent per cui vuoi inviare header personalizzati e utilizzare quella lista—tramite .htaccess
—per consentire a determinati tipi di traffico di bypassare la cache.

Ho trovato la soluzione. È necessario essere sulla versione 0.9.2.4 o superiore di W3TC perché è quella con cui ho testato le modifiche al codice. Ho dovuto modificare il codice del mio plugin e individuare tutti i punti in cui controllavo gli user agent e restituivo una risposta. Poco prima di restituire una risposta negativa (come 404 o 403, a seconda di ciò che l'utente ha impostato nelle impostazioni del plugin), ho dovuto aggiungere questa riga:
define('DONOTCACHEPAGE', true);
È importante notare anche che il modo in cui controllavo gli user agent avveniva tramite una chiamata a una funzione attraverso un evento di WordPress che si trovava molto in alto nella catena degli eventi:
add_action('plugins_loaded','MYPLUGIN::checkAgents',-1000000000);
Questo add_action() è fondamentale perché deve essere eseguito molto presto nella catena, prima che venga caricato il plugin W3TC. Ecco perché è stato utilizzato un numero di priorità negativo.
