Comment rendre WP Rocket compatible avec un plugin de compteur de vues ?

Afin de livrer rapidement le contenu désiré, lorsqu’une personne visite une page, WP Rocket va chercher le contenu dans les fichiers statiques.

Cela induit qu’aucun code PHP n’est lancé, ni même WordPress ! Cette technique est le principe de base de tout système de cache.

Quel est le problème avec les compteurs de vues ?

Puisqu’aucun code de WordPress n’est chargé, cela signifie qu’aucun plugin ne l’est non plus. Pour un plugin ajoutant des boutons sociaux ou une galerie photos, ce n’est pas gênant car ses contenus auront été ajoutés dans le fichier de cache.

Par contre, pour les célèbres plugins/scripts de compteur de vues tel que Post Views Count, cela pose un problème. Pour fonctionner, ces codes PHP ont besoin d’être chargés au moins une fois par vue.

L’inconvénient est qu’un système de cache ne permet pas de faire cela et fausse le décompte du nombre total de vues d’un article.

Comment résoudre le problème ?

Il existe une solution de secours qui fonctionne en JavaScript. Elle permet tout de même de lancer WordPress et ses plugins sans pour autant ralentir le temps de chargement de la page.

L’astuce réside dans le fait d’appeler une nouvelle fois la page en cours, via une requête AJAX avec un paramètre. L’ajout du paramètre empêche WP Rocket de récupérer la version en cache de la page. De cette manière, les plugins de compteur de vues peuvent mettre à jour leur décompte.

Il n’est pas impossible que cette fonctionnalité fasse un jour partie intégrante du plugin. Pour le moment, ce n’est pas prévu.

Voici le code à insérer dans votre fichier functions.php de votre thème (ou thème enfant) ou dans un mu-plugin :

add_action( 'wp_footer', 'wpr_reload_ajax', PHP_INT_MAX );
function wpr_reload_ajax()
{
?><script>
var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
request.open( 'GET', window.location+'?<?php echo time(); ?>=1', true );
request.send();
</script><?php
}
Attention : cette astuce ne permet pas d’avoir le compteur à jour à chaque rechargement de page. Par contre, elle permet d’avoir le décompte à jour et le bon nombre de vues une fois le cache vidé.

À propos de

Creator of SecuPress, Julio is also co-organisator of WordCamp Paris. Compulsive speaker and WordPress expert, he’s a specialist in security since 2002 and contribute to WordPress various ways.

S’abonner à notre newsletter Les dernières actus de la fusée, à la vitesse de la lumière !

15 commentaires

Commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs requis sont indiqués par des *

[i]
[i]