Premiers pas avec l'API WordPress Transient, 2ème partie

Dans le premier article de cette série, nous avons défini la nature de l'API, ses différences entre l'API des paramètres et certains des appels généraux que nous pouvons effectuer avec l'API. Dans cet article, nous examinerons une implémentation pratique de l'API et comment gérer certaines idiosyncrasies liées au traitement de données expirées..

L'API WordPress Transients est un aspect puissant (mais vraiment facile à utiliser) de l'API WordPress. De manière générale, il est très facile de stocker des données avec une date d'expiration et de tirer parti de divers plugins de mise en cache pour augmenter la vitesse de votre site..


Installer le plugin

Pour les besoins de ce plugin, nous allons créer un widget simple qui listera les meilleurs commentateurs de blogs de tous les temps. Le but du plugin est de le garder léger afin que nous puissions mettre en évidence la fonctionnalité de transitoires du plugin.

Notez que tous les fichiers du plugin peuvent être récupérés à partir de GitHub à tout moment. En attendant, créez un répertoire appelé 'top-commenters-cached' et assurez-vous qu'il possède la structure de répertoire suivante:

Si vous n'êtes pas intéressé par la localisation du plugin, n'hésitez pas à laisser le répertoire "lang" en dehors du plugin. À ce stade, nous sommes prêts à commencer à écrire le widget..


Fonctionnalité de base

Le plugin est simple. Cela devrait?

  • Autoriser l'utilisateur à personnaliser le widget
  • Récupérer le top 10 des commentateurs les plus populaires de la vie du blog

Assez facile. Voici le code pour le plugin de base. Notez que c'est commenté tout au long, passez donc quelque temps à le lire pour comprendre ce que nous faisons. Si vous n'êtes pas familier avec l'API de widget, n'oubliez pas de consulter notre article WordPress Widget Boilerplate.

 La classe Top_Commenters_Cached étend WP_Widget const name = 'Principaux commentateurs (mis en cache!)'; const locale = 'top-commenters-cached-locale'; const slug = 'top-commenters-cached'; / * ---------------------------------------------------- - * / / * Constructeur / * --------------------------------------------- --------- * / / ** * Le constructeur du widget. Spécifie le nom de classe et la description, instancie * le widget, charge les fichiers de localisation et inclut les scripts et les * styles nécessaires. * / function Top_Commenters_Cached () $ widget_opts = array ('classname' => self :: name, 'description' => __ ('Un plugin utilisé pour illustrer l'API WordPress Transients pour une série de blogs Envato.', self :: locale)); $ this-> WP_Widget (self :: slug, __ (self :: name, self :: locale), $ widget_opts); load_plugin_textdomain (self :: locale, false, dirname (plugin_basename (__FILE__)). '/ lang /');  // constructeur de fin / * ------------------------------------------- ------- * / / * Fonctions de l'API / * ----------------------------------- --------------- * / / ** * Affiche le contenu du widget. * * @args Le tableau des éléments de formulaire * @instance * / widget de fonction ($ args, $ instance) extract ($ args, EXTR_SKIP); echo $ before_widget; $ widget_title = empty ($ instance ['widget_title'])? ": apply_filters ('widget_title', $ instance ['widget_title']); $ commenters = $ this-> query_for_commenters (); // Afficher le widget include (WP_PLUGIN_DIR . '/'. self :: slug. '/views/widget.php'); echo $ after_widget; // widget de fin / ** * Traite les options du widget afin qu'elles soient enregistrées. * * @new_instance L'instance précédente de valeurs avant la mise à jour. * @old_instance La nouvelle instance de valeurs à générer via la mise à jour. * / function update ($ new_instance, $ old_instance) $ instance = $ old_instance; $ instance ['widget_title'] = $ this-> strip ($ new_instance, 'widget_title'); return $ instance; // fin widget / ** * Génère le formulaire d'administration du widget. * * @instance Le tableau de clés et de valeurs du widget. * / function form ($ instance) $ instance = wp_parse_args ((tableau) $ instance, tableau ('widget_title' => ")); $ widget_title = $ this-> strip ($ instance, 'widget_title'); // Affiche le formulaire d'administration include (WP_PLUGIN_DIR. '/'. Self :: slug. '/Views/admin.php');  // formulaire de fin / * ------------------------------------------- ------- * / / * Fonctions privées / * ----------------------------------- --------------- * / / ** * Récupère les meilleurs commentateurs hebdomadaires de la semaine écoulée et stocke les valeurs dans le cache. * Si le cache est vide, la fonction demandera des informations à la base de données et * les stockera dans le cache. * / fonction privée query_for_commenters () $ commenters = null; // interroge la base de données pour les meilleurs commentateurs global $ wpdb; $ commenters = $ wpdb-> get_results ("select count (comment_author) comme comment_count, comment_author, comment_type à partir de $ wpdb-> comments où comment_type! = 'pingback' et comment_author! =" et comment_approved = "1" groupe par comment_author par ordre comment_author desc LIMIT 10 "); return $ commenters // end query_for_commenters / * --------------------------------- ----------------- * / / * Fonctions d'assistance / * ------------------------- ------------------------- * / / ** * Méthode pratique pour supprimer les balises et les barres obliques du contenu * d'une entrée de formulaire. * * @ obj L'instance du tableau d'arguments * @title Le titre de l'élément dont nous enlevons les balises et les barres obliques. * / private function strip ($ obj, $ title) return strip_tags (stripslashes ($ obj [$ title]) ); // fin de la bande // fin de la classe add_action ('widgets_init', create_function ("," register_widget ("Top_Commenters_Cached"); ')); ?>

Ensuite, regardons la vue du widget. C'est la partie du plugin qui est responsable de l'affichage de la liste des commentaires. Il fonctionne en affichant le titre du widget (s'il est défini), puis en parcourant les résultats pour créer un nouvel élément de liste..

  0) ?> 

'; foreach ($ commenters en tant que $ commenter) $ comment_list. = '
  • '; // affiche réellement le nom du commentateur et le nombre de commentaires $ comment_list. = $ commenter-> comment_author; $ comment_list. = '('. $ commenter-> comments_count. ')'; $ comment_list. = '
  • '; // end foreach $ comment_list. = ''; echo $ comment_list; ?>

    De toute évidence, nous avons omis une partie du code. À savoir, le panneau d'administration. Cela devrait simplement permettre aux utilisateurs de saisir un titre pour leur widget:

     

    Rappelez-vous que vous pouvez voir le code source complet et télécharger le plugin à partir de son référentiel GitHub.


    Cache les données

    À ce stade, nous avons un plugin fonctionnel; Cependant, nous ne mettons pas encore en cache de données. La partie la plus intensive de ce plugin est lorsque nous interrogeons la base de données et que les résultats de la requête sont ce que nous voulons réellement mettre en cache, alors faisons-le..

    Localisez la requête dans le code:

     $ wpdb global; $ commenters = $ wpdb-> get_results ("select count (comment_author) comme comment_count, comment_author, comment_type à partir de $ wpdb-> comments où comment_type! = 'pingback' et comment_author! =" et comment_approved = "1" groupe par comment_author par ordre comment_author desc LIMIT 10 ");

    Et stockons les résultats pendant 12 heures à l'aide de l'API transitoires:

     set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12);

    Assez facile, non? Bien sûr, nous n'avons pas encore fini.


    Récupérer les données

    Une fois que le transitoire est défini, nous devons pouvoir récupérer le transitoire. Réglons cela maintenant:

     fonction privée query_for_commenters () return get_transient ('top_commenters_cached');  // end query_for_commenters

    C'est tout ce qu'on peut en dire!

    Mais attendez - si vous vous rappelez du premier message de la série, les transitoires expirent et nous ne sommes donc pas sûrs de récupérer le transitoire..


    Recherche de données manquantes

    Quoi que vous fassiez, l'extraction de données expirées suit généralement le même processus:

    • Vérifier l'existence du transitoire
    • S'il existe, utilisez-le
    • S'il n'existe pas, définissez-le puis récupérez-le

    Faisons cela dans le contexte de notre plugin:

     fonction privée query_for_commenters () $ commenters = null; // vérifie si le transitoire existe. définissez-le s'il est expiré ou manquant if (! get_transient ('top_commenters_cached')) // interroge la base de données sur les principaux commentateurs global $ wpdb; $ commenters = $ wpdb-> get_results ("select count (comment_author) comme comment_count, comment_author, comment_type à partir de $ wpdb-> comments où comment_type! = 'pingback' et comment_author! =" et comment_approved = "1" groupe par comment_author par ordre comment_author desc LIMIT 10 "); // stocke le résultat set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12); // s'il est garanti que // le transitoire existera maintenant, renvoyez-le donc return get_transient ('top_commenters_cached '); // end query_for_commenters

    Conclusion

    Pas trop mal, non?

    Comme vous pouvez le constater, l'utilisation de l'API Transients nécessite peu plus que de savoir quand l'utiliser et quelles fonctions sont disponibles. À mon avis, c'est l'un des aspects les plus puissants de l'API WordPress.

    Si vous vous retrouvez en train d'extraire de grandes quantités de données, si vous cherchez un moyen de les actualiser pour une actualisation ou si vous souhaitez simplement tirer parti des plugins de mise en cache, n'oubliez pas de tirer parti de l'API Transients..