Questo articolo apparteneva al vecchio blog (blog.danilopetrozzi.it), per cui le informazioni potrebbero non essere più aggiornate ed attendibili.

Pillole di WordPress: impedire che alcuni elementi vengano cachati da W3 Total Cache

Difficoltà:

La pillola di oggi ha difficoltà 5/5, non tanto per il codice in sé, che è abbastanza corto, quanto per la difficoltà nell’armonizzare l’esecuzione di PHP all’interno di pagine “staticizzate” grazie al Page cache di W3 Total Cache.

Obiettivo

L’obiettivo di questa pillola è semplice: vogliamo fare in modo che all’interno delle pagine cachate con W3 Total Cache ci sia del codice che è “immune” alla cache e che quindi sia dinamico (viene eseguito ad ogni caricamento della pagina).

Immagina di avere un sito molto pesante sul quale hai inserito W3 Total Cache per rendere statiche le pagine, al fine di migliorare la velocità di caricamento. Se avessi, per caso, un orologio HTML che indica l’ora attuale, molto probabilmente sarebbe sballato perché indicherebbe sempre l’orario in cui WTC ha generato quella specifica cache.

Oppure nel caso di codici PHP in cui c’è una funzione che sceglie, ad ogni caricamento, un elemento random (a caso). Dato che la pagina è cachata, la scelta di quel PHP sarà sempre la stessa finché la cache non viene svuotata e ricreata.

Soluzione

Per riuscire nell’impresa, useremo il fragment caching: la possibilità messa a disposizione da Total Cache per dinamicizzare una porzione di codice.

Dato che attraverso il fragment caching è possibile eseguire qualsiasi codice PHP, per rendere tutto più semplice tenteremo di dinamicizzare l’esecuzione di date() per dimostrare che, anche se la pagina cachata è sempre la stessa (vedremo il “footer” di Total Cache con tutte le informazioni) in realtà il nostro codice PHP verrà lanciato ad ogni caricamento di pagine (ci accorgeremo dell’incremento del tempo)

Immergiamoci!

Per prima è necessario inserire una riga  nel wp-config.php che serve per migliorare la sicurezza dell’operazione. Deve essere inserita prima del commento di fine modifiche. Inseritela proprio così, per stare sicuri:

In pratica, abbiamo deciso che “FRAGMENT_CACHING” è la parola chiave con cui autorizzeremo l’utilizzo della funzione. Siete liberi di cambiare questa stringa con un’altra, ma poi ricordatevi di usarla nel punto giusto.

Ora che il wp-config.php è sistemato, posizionatevi nel punto in cui dovrebbe esserci il codice PHP da eseguire ogni volta. Per scrivere un codice PHP da lanciare con il fragment caching NON DOVETE usare i tag di apertura di PHP  <?php  ….  ?>

Al loro posto, usiamo una funzione particolare, ossia:

Sostanzialmente, dovete solo prendere il codice PHP originale e sostituire:

  • <?php con <!– mfunc FRAGMENT_CACHING –>
  • ?> con <!– /mfunc FRAGMENT_CACHING –>

Da notare che se nel wp-config.php al posto di FRAGMENT_CACHING aveste utilizzato XXX, le due stringhe sarebbero  <!– mfunc XXX –> … <!– /mfunc XXX –>

Alcune cose da tenere a mente

Il fragment caching funziona perché, a differenza del codice PHP puro, in questo inseriamo il codice all’interno di due commenti che poi permettono al WTC di vederlo e eseguirlo. Il codice PHP, invece, viene sempre generato lato server prima del rendering della pagina, e il suo output viene semplicemente inserito nel codice. “Wrappando” tutto dentro i due commenti, facciamo in modo che i comandi PHP al loro interno vengano eseguiti sempre.

Se avete letto bene, capite che tutto si basa su quei due commenti particolari. Quindi è ovvio che se avete un plugin che elimina i commenti dal codice sorgente, dovete assolutamente spegnerlo! Fateci molta attenzione, dato che quella di fare il minify dell’HTML è una pratica molto comune (vi risparmio ore e ore a cercare il problema, dato che magari era solo la pulitura dell’HTML a causa di qualche minifier)

Mettiamo all’opera il codice

Ho creato un widget temporaneo nel footer di questo blog (dove uso W3 Total Cache) e ho eseguito tutte le istruzioni alla lettera. All’interno del widget in esame ho inserito questo semplice comando:

Poi ho fatto generare la cache da W3 Total Cache e sono andato ad aprire il sito più e più volte (da sloggato, per sicurezza). Ecco il risultato:

risultato esperimeno fragment caching con w3 total cache

Come potete osservare, la pagina cachata era sempre la stessa, tant’è che W3 Total Cache mi ha detto tutte e tre le volte che la pagina è stata “served from” … 07:46:20

Ma ad ogni caricamento il codice PHP date() è stato eseguito, e quindi ha scritto l’orario del momento.

Siamo riusciti a eseguire un’istruzione PHP anche all’interno di una pagina cachata, high five!

Danilo petrozzi

Ciao! Io sono Danilo Petrozzi, il fondatore di Eternal Curiosity. Oltre a essere un senior SEO Specialist e un Web Developer, è dall'età di 9 anni che mi appassiono a qualsiasi cosa ruoti intorno al web e all'informatica in generale.

Lascia un commento