Revocare il DONOTCACHEPAGE tramite filtro in WP Rocket

Introduzione

Gran parte dei plugin di cache per WordPress usano una maniera standard per escludere le pagine dalla cache: la costante  DONOTCACHEPAGE.
Se questa costante è definita come  true durante una richiesta, WP Rocket non metterà in cache la pagina in question, però permetterà una regolare richiesta del database a WordPress.

Nonostante ciò, in alcuni rari casi, è necessario revocare questo comportamento e WP Rocket ti permette di farlo. Ecco come.

Come WP Rocket mette in cache le pagine

Lo scopo finale di ogni plugin di cache è quello di impedire il caricamento WordPress e di restituire, ogni qualvolta sia possibile, la pagina richiesta al browser come una collezione di file statici.

La messa in cache di una pagina da parte di WP Rocket potrebbe essere semplificata come segue:

  1. Uno dei primi file WordPress che vengono caricati dopo la prima richiesta iniziale all' index.php è il file wp-config.php. La prima cosa che WP Rocket ha fatto è stata definire la costante—WP_CACHE—come true all'inizio del file wp-config.php:
    define( 'WP_CACHE', true);
  2. Questo indica a WordPress di caricare wp-content/advanced-cache.php.
  3. Dentro il contenuto del file advanced-cache.php vi è anche il comando per cui WP Rocket dice a WordPress di caricare il file wp-rocket/inc/front/process.php.
  4. Dall'interno del process.php WP Rocket carica poi wp-content/wp-rocket-config/{site-url.tld}.php che contiene la configurazione relativa a un determinato utente.
  5. Sempre dal file process.php, e dopo aver processato molti controlli di esclusione etc, WP Rocket arriva a mettere in cache i file per la pagina richiesta.

Una volta che la pagina è stata messa in cache, la richiesta verrà direttamente servita dalla cache, senza alcun database di query o PHP.

Escludere una pagina dalla cache tramite il “DONOTCACHEPAGE”

Per alcuni tipo di pagine, è imperativo che la cache non sia attiva. Pensa per esempio al contesto di un e-commerce: quando il cliente arriva al pagamento, vogliamo evitare che veda una pagina cache con i dati di pagamento del cliente precedente!

Plugin elaborati come WooCommerce (e molti altri) usano la costante  DONOTCACHEPAGE per far sapere ai plugin di cache che certe pagine non dovrebbero mai essere messe in cache.

Di conseguenza, tutti i plugin di cache più popolari, incluso WP Rocket, supportano questa costante e non immagazzinano in cache una richiesta per la quale la costante   DONOTCACHEPAGE è definite come true.

Rimuovere il DONOTCACHEPAGE tramite filtro in WP Rocket

Per quanto la costante  DONOTCACHEPAGE risulti utile e comoda in molti casi, ci sono delle situazioni in cui l'amministratore del sito ha bisogno di rimuoverla in modo da forzare la messa in cache di una data richiesta, a prescindere dal fatto che un plugin esterno stia tentando di usare la costante per escludere la pagina dalla cache. 

WP Rocket ti viene incontro: tutto ciò che devi fare è passare  true dentro uno speciale filtro di WP Rocket, e WP Rocket ignorerà la costante DONOTCACHEPAGE.

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );

Puoi copiare il seguente snippet di codice in un (MU) plugin:

<?php
/**
 * Plugin Name: Your Plugin Name Here
 * Description: Short description of your plugin here.
 * Author:      your name here
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */
defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );

Per sapere come creare un MU plugin, leggi questo articolo: 
Come creare un (MU) Plugin personalizzato

Esempio: Pagine in cache per gli utenti registrati del tuo sito

Diciamo che tu stia usando un plugin di membership che ti permette di servire del contenuto specifico ai soli utenti registrati del tuo sito. Vorresti poter abilitare la funzione di WP Rocket Cache per gli utenti conosciuti, così da offrire ai tuoi utenti registrati delle pagine più veloci, precedentemente messe in cache.

Alcuni plugin di membership definiscono la costante  DONOTCACHEPAGE per gli utenti registrati, perché normalmente gli utenti registrati hanno accesso a contenuto dinamico, non dinamico.

Nel nostro esempio, tuttavia, hai bisogno di dare ai tuoi utenti registrati solo del contenuto statico, aggiuntivo rispetto a quello offerto agli utenti non registrati. Per questo avrai bisogno di rimuovere la direttiva  DONOTCACHEPAGE impostata dal plugin di membership e permettere così all'opzione Cache per gli utenti conosciuti di lavorare correttamente. 

Per farlo, meglio  creare un plugin personalizzato o un MU plugin come spiegato sopra.