Outrepasser DONOTCACHEPAGE via un filtre

Introduction

La plupart des plugins de mise en cache pour WordPress utilisent un standard de facto pour exclure les pages de la mise en cache : la constante DONOTCACHEPAGE. Si elle est définie à true lors d’une requête, WP Rocket ne mettra pas en cache la page en question, mais autorisera une requête régulière de base de donnée sur WordPress.

Néanmoins, dans certains rares cas, ce comportement doit être outrepassé, et WP Rocket vous permet de faire ça. Voici la manière de procéder.

Comment WP Rocket met en cache une page

Le but final de tout plugin de mise en cache est de ne pas avoir à charger WordPress, tout en livrant chaque page en un ensemble de fichiers statiques vers le navigateur dès que cela est possible.

La mise en cache d’une page avec WP Rocket peut être simplifiée comme suit :

1
Un des premiers fichiers WordPress charge après la requite initiale faite à son index.php est wp-config.php. La première chose que WP Rocket a faite est de definir une constante WP_CACHE à true au début de wp-config.php: define( 'WP_CACHE', true);
2
Cela dit à WordPress de charger wp-content/advanced-cache.php.
3
Depuis le fichier advanced-cache.php WP Rocket dit à WordPress de charger wp-rocket/inc/front/process.php.
4
Depuis le fichier process.php WP Rocket charge wp-content/wp-rocket-config/{site-url.tld}.php qui contient la configuration définie par l’utilisateur
5
Toujours depuis le process.php, et après avoir effectué quelques vérifications pour les exclusions etc., WP Rocket met alors en cache les fichiers pour les pages en requête. 

Une fois que la page a été mise en cache, la requête sera directement envoyée depuis le cache, sans aucune requête vers la base de donnée ou le PHP.

Exclure une page de la mise en cache via "DONOTCACHEPAGE"

Certains types de pages doivent impérativement ne pas être mises en cache. Prenons l’exemple d’un site de e-commerce : quand un client arrive sur la page de paiement, ils ne veulent pas voir une page mise en cache avec les informations de paiement d’un client précédent.

Les extensions élaborés comme WooCommerce (et beaucoup d’autres) utilisent la constante DONOTCACHEPAGE pour que les extensions de mise en cache connaissent les pages et terminaisons à ne jamais mettre en cache.

Par conséquent, toutes les extensions de mise en cache connues, dont WP Rocket, sont compatibles avec la constante et ne mettrons pas en cache une requête pour laquelle DONOTCACHEPAGE est définie à true.

Outrepasser DONOTCACHEPAGE via un filtre dans WP Rocket

La constante DONOTCACHEPAGE est aussi pratique qu’utilisée, mais il existe des cas où l’administrateur d’un site a besoin de l’outrepasser dans le but d’avoir une requête spécifique mise en cache, même si une extension tierce a essayé d’employer la constant commune pour l’exclusion de cache d’une page.

WP Rocket vous aide dans ce cas. Tout ce que vous avez besoin de faire, c’est passer true à un filtre special dans WP Rocket, et WP Rocket ignorera la constante DONOTCACHEPAGE.

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

Vous pouvez copier l’extrait de code ci-dessus dans une extension personnalisée, comme décrit dans l’article suivant : 
Comment créer une extension automatique (Must-Use)

Exemple : les pages mises en cache pour les membres

Imaginons, vous utilisez une extension d’adhésion de membres qui donne accès à du contenu spécifique uniquement pour les membres connectés. Vous voudrez activer l’option cache utilisateur dans WP Rocket afin d’offrir à vos membres connectés des pages mises en cache avec un téléchargement rapide.

Certaines extensions d’adhésion de membres définissent la constante DONOTCACHEPAGE pour les membres connectés, car un cas courant voudrait ne pas envoyer de contenu statique mais dynamique aux membres.

Dans notre exemple toutefois, vous voulez seulement livrer du contenu statique à vos membres connectés, en plus du contenu que les utilisateurs non enregistrés peuvent voir. Vous aurez donc besoin d’outrepasser la directive DONOTCACHEPAGE mise en place par l'extension d’adhésion de membres afin que l’option cache utilisateur de WP Rocket fonctionne correctement.

Pour faire cela, il est préférable de créer une extension personnalisée ou automatique (Must-Use) et d’ajouter l’extrait de code ci-dessus.