Utilisation de cookies dans WordPress, partie 2: utilisation d’ajax pour détruire le cache
La mise en cache rend tout plus difficile. Si vous écrivez du Code et que vous et vos clients, collègues, etc. ne voyez aucun résultat, le problème est généralement la mise en cache. En fait, Carlton cite affectueusement: « il n’y a que deux choses difficiles en informatique: l’invalidation du cache et le nommage. Défi: mise en cache de pages entières, il est donc logique que l’article de la semaine dernière sur l’écriture de cookies PHP dans WordPress ait un grand astérisque sur le cache. En particulier, la mise en cache de toute la page rend notre site rapide (c’est la mise en cache dynamique de notre super cache siteground préféré), ce qui signifie que même les cookies ne peuvent pas être récupérés.
Plus précisément, vous pouvez enregistrer de nouveaux cookies sur le serveur, mais les cookies $u de l’objet http ne reflètent pas ces changements parce que le serveur ne cherche pas les changements: il fournit une version mise en cache de la page entière, y compris le titre. Ceci est bien expliqué (et clarifié) dans cet article de Nick Davis. Par conséquent, après un commentaire confus (et troublant) sur cet article, j’ai dû désactiver dynamic page cache pour que la démo fonctionne correctement, ce qui, bien sûr, pourrait ne pas être possible sur les sites qui ont besoin d’un cache de page complet et de cookies. Tu n’aurais pas dû choisir.
Solution: Ajax s’est avéré être une solution qui utilise Ajax. Ajax est un moyen de parler directement au serveur Web après le chargement de la page, puis de mettre à jour la page en utilisant les résultats de la conversation. C’est exactement ce dont nous avons besoin pour contourner le cache de page entière, car notre problème est que les nouvelles informations de Cookie sont définies sur le serveur, mais lorsque vous
Bloquer la page. Par conséquent, nous allons creuser dans le serveur et utiliser Ajax pour obtenir cette information par nous – mêmes. Présentation de la nourriture préférée au travail: envoyer
Il fonctionne de la même façon que la démonstration de la semaine dernière, mais il ne force pas les mises à jour de page. Utilisez le cache de page activé sur la page (cache dynamique sitegound). Notre solution ici est une description détaillée de l’article de Nick Davis et d’un article du moteur WP sur les cookies et la mise en cache WordPress. Nous utilisons également la Bibliothèque de cookies JS simple recommandée par Paul Underwood. Si vous souhaitez parcourir le code source complet, vous pouvez utiliser ce plug – in sur github. Nous n’en énumérons que quelques – uns ci – dessous.
Nous travaillons beaucoup moins sur PHP que la semaine dernière. Maintenant, nous allons faire trois choses: 1. Ajouter une opération d’ajout de fichier javascript (\
Appeler WP _ localize script () est notre méthode pour fournir des variables PHP aux fichiers JS. Dans notre exemple, nous devons faire quelque chose de commun: dire au script où la requête Ajax doit pointer. 2. Gérer la demande d’opération Ajax add U (\
«); Fonctions wpshout _ get fave Food Cookie () {$Cookie = $post [‘Cookie]; echo $Cookie [$Cookie]; Die;} Ce code effectue le traitement côté serveur des requêtes Ajax. En d’autres termes, il recherche des membres spécifiques du tableau $u cookie. Nous définissons quel membre sera basé sur un message nommé \
Une fois l’élément $u Cookie restauré, ce code le renvoie au JS qui l’a appelé en utilisant Echo et arrête l’exécution. 3. Enregistrer le raccourci ajouter un raccourci (‘JS _ Cookie Demo’, ‘wpjcd show Cookie result’); Fonction wpjcd _ show Cookie Result (); echo ‘
‘; Retourner Ob _ get Clean ();} Ajouter un raccourci (‘JS _ Cookie form’, ‘wpjcd show Cookie form’); Fonction wpjcd _ show Cookie form () {Ob Start ();? >
<? Php return Ob _ get Clean (); Cette partie du Code est similaire à celle de la semaine dernière; Inscrivez – vous à deux courts codes wordpress pour voir notre module \
JavaScript nous avons fait beaucoup de choses avec Javascript. Nous discuterons de deux des choses les plus importantes: Ajax request \/ * Ajax request to get Current cookies despite the cache * \/ $. Post (ajaxurl.url, {'action': 'wpshout _ get fave Food Cookie,', 'Cookie': cookiename,}, Function (Response) {console.log (Response); fave = Response; if (type of (fave) = 'underlined') {$('Current favorite'). Html (nofavetext);} Else {$('. Current favorite'). Html (favetext + fave);}}; C'est le point clé de la solution. Notre JS ne demande pas ce qui est stocké dans la page courante $_ Cookie, mais demande directement ajaxurl WordPress. Le résultat est que nous Récupérons les résultats non mis en cache du serveur.
Lorsqu'il obtient le résultat, il le publie sur la page comme contenu de l'élément dans la classe favorite actuelle. Encore une fois, si Ajax lui – même n'est pas clair,