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

Hello Julio,

C’est une super astuce ! Merci !
Je vais la mettre en place rapidement 🙂

Bonne continuation, et merci pour tous ces articles très utiles.
Geoffrey

Hello

Rien à voir, mais où je peux trouver une belle barre de partage réseau sociaux comme la votre 🙂

Merci

Bonjour Alex,

Vous ne pouvez pas la retrouver ailleurs car c’est du développement maison 🙂

Cette astuce tombe à point nommée ! J’utilisais déjà ton plugin ET Rocket depuis peu. Je peux disposer librement des 2 à présent ! 😀

@Jonathan Buttigieg : Mince alors ^^

Je galère pour trouver quelques chose pour remplacer ShareThis qui est lourd…et j’avais trouvé une bonne alternative sur http://www.creativejuiz.fr/blog/wordpress/plugin-juiz-social-post-sharer-partage-contenu-reseaux-sociaux, mais sans compteur et surtout, les réseaux sociaux ne s’ouvre pas en pop-in…bref. Une petite piste pour moi ? Peut -etre quelques chose d’alternatif que vous avez mis à disposition ?

Désolé pour le HS 🙂

et merci beaucoup

Bonjour,

est-ce que cette astuce s’applique au plugin de Julio : Post Views Count.

D’avance merci pour votre réponse.

Guillaume.

Re,

je viens de regarder votre script, n’y-at-il pas une erreur aux lignes 4 et 8 avec les balises d’ouverture et de fermeture de PHP ?

D’avance merci pour votre réponse et votre confirmation.

Cordialement.

@Guillaume
Oui bien sur cela s’applique au plugin de Julio.
C’est dans le fichier functions.php dont la balise PHP est normalement déjà ouverte.

Bonjour,
Je voudrais avoir un peu plus de renseignements sur cette fonction car je n’ai pas l’impression quelle fonctionne (du moins sur mon blog).
J’utilise le plugin wp-postviews de Lester ‘GaMerZ’ Chan. Lorsque je clic n fois de suite sur un lien de mon article, tous les clics n+1 ne sont pas pris en compte ?
Y-a-t-il autre chose à faire ou est-ce normal ?
D’avance merci pour votre réponse.

@Guillaume: Ceci est un comportement tout à fait normal. Les plugins de ce type limite le compteur à un visiteur pour X temps.

Sinon, on envoi un robot qui visite plusieurs fois la même page et fait augmenté le compteur de vue comme on veut 🙂

Bonjour,

Du coup, est-ce que wp-rocket reste compatible avec google analytics ou un plugin wp-statistics ?
(sans mettre cette option).

Matthieu

@Matthieu: Google Analytics & WP Statitics utilisent du JavaScript au contraire des compteurs de vue qui font leur décompte en PHP.

Hello !
Question bête (ou pas) : si cette fonction appelle la page avec Ajax et force le serveur à l’exécuter, est-ce que ça va pas à l’encontre de ce qu’on essaie de faire avec WP-Rocket ?

Du coup, est-ce qu’on pourrait pas tout simplement, via Ajax, faire tourner la fonction du compteur de vues ?

Merci pour l’astuce

je vais tester ca tout de suite

Bonjour,

Nickel, je me demandais pourquoi sur un article qui faisait 200 vues, il n’y avait que 25 prises en compte.
Le code est à mettre à la fin de la page function.php?

Laisser un commentaire

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