Accélérez votre WordPress en mettant en cache des requêtes personnalisées à l'aide de l'API Transients
O mon garçon, le titre semble effrayant, n'est-ce pas? Vous n'avez rien à craindre car nous allons tout décomposer. Votre thème exécute-t-il des requêtes WordPress personnalisées pour afficher des publications aléatoires, populaires, récentes, etc. dans la barre latérale ou ailleurs? Si tel est le cas, envisagez d'utiliser l'API transitoire WordPress pour mettre en cache ces requêtes afin de réduire la consommation de ressources et réduire le temps de chargement. Dans cet article, nous allons vous montrer comment accélérer votre site WordPress en mettant en cache des requêtes personnalisées à l'aide de l'API Transients..
Remarque: vous devez comprendre le fonctionnement des thèmes WordPress (boucles, etc.) pour pouvoir suivre ce post..
Donc, tout ce jargon de cache et de transitoire me dépasse. Eh bien ne vous inquiétez pas, laissez-nous vous expliquer ce que ça fait. Fondamentalement, si vous utilisez un site comme List25 et que vous avez une boucle qui affiche 6 messages aléatoires dans votre barre latérale, une API transitoire peut vous aider. Chaque fois qu'un utilisateur actualise la page, la requête WP que vous avez personnalisée ira dans votre base de données et extraira 6 messages au hasard. Si vous êtes un site relativement nouveau, cela ne devrait pas être si grave. Mais si vous attirez beaucoup de personnes sur votre site, votre serveur SQL peut se bloquer, et l'écran «Erreur d'établissement de la base de données» s'affiche. En ajoutant quelques lignes de code supplémentaires, vous pouvez facilement stocker les résultats de cette requête (la mettre en cache) pendant un certain temps à l'aide de l'API Transients..
Exemple de code de boucle que nous avions pour extraire des publications aléatoires:
have_posts ()): $ random_query-> the_post (); ?>
La partie la plus intéressante de notre requête de messages aléatoires dans l'encadré était qu'elle montrait un nouveau contenu à chaque fois. Donc, en mettant en cache la requête pendant 12 heures, nous aurons les mêmes 6 messages affichés pendant 12 heures, n'est-ce pas? Nous avons trouvé un moyen de contourner le problème grâce à la suggestion de notre ami Konstantin Kovshenin (@kovshenin). Il a suggéré qu'au lieu d'utiliser WP_Query, nous utilisions get_posts et retirions 20 articles. Mettez en cache les résultats de cette requête à l'aide de l'API transitoires, puis utilisez la fonction array_rand () pour afficher uniquement 6 messages au hasard sur 20. De cette façon, nous pouvons continuer à simuler l'effet aléatoire sur le site..
La première chose que nous avons faite a été de définir le transitoire. Nous avons reçu le code de la page WordPress Codex.
// Obtient une copie existante de nos données transitoires if (false === ($ special_query_results = get_transient ('special_query_results')))) // Elle n'était pas là, alors régénérez les données et enregistrez le transitoire $ randargs = array ( 'orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12);
Notez que 60 * 60 * 12 est la zone où vous pouvez contrôler la longueur du cache. N'hésitez pas à le changer en ce que vous voulez. Maintenant, si nous montrons le $ special_query_results en utilisant la boucle foreach, les 20 articles seront affichés. Nous devons donc utiliser la fonction array_rand () pour extraire 6 éléments au hasard. Nous avons ajouté le code comme ceci:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Cela va maintenant extraire 6 identifiants de poste au hasard de nos données transitoires. Cependant, il ne tirera pas les valeurs pour chaque poste. Nous avons donc dû ajouter ces bouts de code:
$ sixposts [0] = $ randomposts [$ randkey [0]]; $ sixposts [1] = $ randomposts [$ randkey [1]]; $ sixposts [2] = $ randomposts [$ randkey [2]]; $ sixposts [3] = $ randomposts [$ randkey [3]]; $ sixposts [4] = $ randomposts [$ randkey [4]]; $ sixposts [5] = $ randomposts [$ randkey [5]];
En gros, nous avons créé un tableau pour $ sixposts dans lequel nous attribuons une valeur à chacun de ces éléments. Je ne sais pas si c'était la meilleure façon de procéder, mais cela a fonctionné. Si certains d’entre vous ont de meilleures suggestions, n'hésitez pas à les poster dans les commentaires..
Après cela, nous sommes maintenant prêts à afficher la boucle. Il suffit de mettre le code comme ceci:
global $ post; // requis pour que cela fonctionne pour chaque fonction ($ sixposts as $ post): setup_postdata ($ post); // Tous les articles vont ici. fin de chaque
setup_postdata vous permet d'utiliser toutes les balises de boucle à l'intérieur de cette boucle foreach telle que the_permalink, etc..
Pour faciliter la tâche de tous, voici le code final que nous avons:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); // Utilisez les données comme vous en auriez normalement… $ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6); $ sixposts [0] = $ randomposts [$ randkey [0]]; $ sixposts [1] = $ randomposts [$ randkey [1]]; $ sixposts [2] = $ randomposts [$ randkey [2]]; $ sixposts [3] = $ randomposts [$ randkey [3]]; $ sixposts [4] = $ randomposts [$ randkey [4]]; $ sixposts [5] = $ randomposts [$ randkey [5]]; global $ post; foreach ($ sixposts as $ post): setup_postdata ($ post); ?>
Ta da, maintenant vous faites cette requête de base de données une fois toutes les 12 heures, peu importe le nombre d'utilisateurs visitant votre site.