Interaction avec les API de plug-ins et de thèmes de WordPress

L'API WordPress Repository est l'API utilisée pour extraire les informations de plug-in et de thème à utiliser sur vos pages d'administration. Par exemple, il affiche les derniers plug-ins sur le tableau de bord, vous permet d'afficher des thèmes sur votre onglet de thème et vous permet de rechercher et d'installer des plug-ins directement à partir du référentiel. Dans ce tutoriel, nous allons voir comment cette API fonctionne et comment elle peut être utilisée pour accéder à des informations telles que la classification de votre plug-in, le nombre de fois où il a été téléchargé, ou même ses sections Lisez-moi. À l'aide de cette API, par exemple, vous pouvez héberger un lien sur votre site Web qui pointe toujours vers la dernière version de votre plug-in ou de votre thème..

Lorsque WordPress recueille des informations sur les plug-ins et les thèmes à partir du référentiel, il le fait en envoyant une demande à l'une des deux URL..

  • Pour les plug-ins: http://api.wordpress.org/plugins/info/1.0/
  • Pour les thèmes: http://api.wordpress.org/themes/info/1.0/

La requête prend la forme d'un tableau avec un 'action' et 'demandeclé.

 $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/', array ('body' => array ('action' => $ action, 'request' => serialize ((object ) $ args))));

Obtenir les détails d'un plug-in ou d'un thème

Lors de la récupération de données sur un plugin ou un thème, le 'action'devrait être réglé sur plugin_information ou thème_information respectivement. La valeur de la clé de demande doit être un objet sérialisé avec une propriété slug (le slug du thème / plug-in) et une propriété de champ, indiquant les données que nous recherchons (les champs disponibles sont détaillés ci-dessous). Dans l'extrait ci-dessus, $ args devrait être un tableau associatif avec des clés données par ces propriétés.

La valeur de retour de wp_remote_post, $ réponse, peut-être un WP_Query error ou bien une réponse authentique du référentiel contenant un message d'erreur. Mais si tout s'est bien passé, le plug-in ou l'objet thème renvoyé peut en être extrait avec les éléments suivants:

 $ return_object = Maybe_unserialize (wp_remote_retrieve_body ($ réponse));

Interrogation des référentiels de plug-ins et de thèmes

Pour récupérer une liste de thèmes / plug-ins correspondant à certains critères, vous devez définir l'action sur query_themes ou query_plugins. Ceci devrait être accompagné d'une clé appropriée (par exemple 'auteur', pour obtenir des plugins / thèmes d'un auteur particulier) dans le $ args tableau. Les critères possibles sont donnés ci-dessous.

Encore une fois (en supposant qu'aucune erreur ne s'est produite), le tableau des plug-ins correspondants doit être donné par:

 $ return_object = Maybe_unserialize (wp_remote_retrieve_body ($ réponse)); $ plugins = $ return_object-> plugins;

et de même pour les thèmes:

 $ return_object = Maybe_unserialize (wp_remote_retrieve_body ($ réponse)); $ themes = $ return_object-> themes;

Chaque objet theme / plugin dans le tableau a les mêmes propriétés que celles déterminées par la clé fields dans la $ args tableau. Les champs disponibles sont listés ci-dessous, ainsi que les champs par défaut (pour *_information requêtes). Veuillez noter que les valeurs par défaut sont différentes pour différentes actions..


Propriétés du plug-in

Comme indiqué ci-dessus $ args est un tableau associatif pouvant contenir les champs suivants:

  • limace - (Quand l'action est plugin_information). Le slug du plug-in pour renvoyer les données pour.
  • Feuilleter - (Quand l'action est query_plugins). Prend les valeurs En vedette, populaire ou Nouveau.
  • auteur - (Quand l'action est query_plugins). Le nom d'utilisateur WordPress de l'auteur, pour récupérer les plugins d'un auteur particulier.
  • étiquette - (Quand l'action est query_plugins). Balise avec laquelle récupérer les plugins pour.
  • chercher - (Quand l'action est query_plugins). Un terme de recherche, avec lequel rechercher dans le référentiel.
  • des champs - un tableau avec les champs possibles (listés ci-dessous) comme clés et vrai ou faux valeur pour renvoyer des données pour ce champ ou non. Les champs inclus constituent les propriétés de l'objet renvoyé ci-dessus. Les champs possibles sont (paramétrés par défaut sur vrai, sauf indication contraire):
    • version - dernier
    • auteur - nom de l'auteur et lien vers le profil
    • a besoin - la version minimale de WordPress requise
    • testé - la dernière version de WordPress testée
    • compatibilité - un tableau contenant un tableau pour chaque version de votre plug-in. Ce tableau stocke le nombre de votes, le nombre de votes 'travaux' et ce nombre en pourcentage.
    • téléchargé - le nombre de téléchargements
    • évaluation - en pourcentage
    • num_ratings - nombre de notes
    • sections - il s’agit d’un tableau contenant le code HTML de chaque section de la page du plug-in WordPress en tant que valeurs, les clés peuvent inclurela description','installation','captures d'écran','changelog' et 'FAQ'.
    • lien de téléchargement - pointe vers le fichier ZIP hébergé de la dernière version du plugin
    • la description - (défaut faux)
    • brève description - (défaut faux)

Les autres champs incluent 'prénom','limace','author_profile','Mots clés','page d'accueil','contributeurs','ajoutée' et 'dernière mise à jour'.

Exemple

À titre d'exemple, affichons la liste des plug-ins d'un auteur en particulier, ainsi que le nombre de fois qu'ils ont été téléchargés:

 // Définit les arguments. Par souci de brièveté du code, je ne définirai que quelques champs. $ args = array ('author' => 'stephenh1988', 'fields' => array ('téléchargé' => true, 'downloadlink' => true)); // Demande et extrait un plug-in. L'action est query_plugins $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/', array ('body' => array ('action' => 'query_plugins', 'request' => sérialiser ((objet) $ args)))); if (! is_wp_error ($ response)) $ return_object = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ return_object-> plugins; if (! is_array ($ plugins)) // Le corps de la réponse ne contient pas d'objet / tableau echo "Une erreur est survenue";  else // Affiche une liste des plug-ins et le nombre de téléchargements si ($ plugins) echo '
    '; foreach ($ plugins en tant que $ plugin) echo "
  • ".esc_html ($ plugin-> name)." (téléchargé ".esc_html ($ plugin-> téléchargé)." fois)
  • "; else // Un objet d'erreur a renvoyé echo" Une erreur est survenue ";

Propriétés du thème

La demande d'API par thème est très similaire, bien que des champs légèrement différents soient disponibles..

  • limace - (Quand l'action est thème_information) Le slug du thème pour renvoyer les données pour.
  • Feuilleter - (Quand l'action est query_themes). Prend les valeurs En vedette, Nouveau ou mis à jour.
  • auteur - (Quand l'action est query_themes). Le nom d'utilisateur de l'auteur, pour récupérer les thèmes d'un auteur particulier.
  • étiquette - (Quand l'action est query_themes). Un tableau de balises avec lequel récupérer des thèmes pour.
  • chercher - (Quand l'action est query_themes). Un terme de recherche, avec lequel rechercher dans le référentiel.
  • des champs - encore un tableau avec un vrai ou faux valeur pour chaque clé (champ). Les champs inclus constituent les propriétés de l'objet renvoyé ci-dessus. Les champs possibles sont (paramétrés par défaut sur vrai, sauf indication contraire):
    • version - (dernier)
    • auteur
    • preview_url - URL vers l'aperçu hébergé sur wp-themes.com
    • screenshot_url - URL de la capture d'écran
    • screenshot_count* - nombre de captures d'écran du thème
    • captures d'écran* - tableau d'URL de capture d'écran
    • évaluation - (en pourcentage)
    • num_ratings - nombre de notes
    • téléchargé - nombre de téléchargements
    • sections
    • la description
    • lien de téléchargement

Les autres champs incluent 'prénom','limace','Mots clés','page d'accueil','contributeurs', et 'dernière mise à jour'.

*Veuillez noter qu'à l'avenir, les thèmes seront [permis pour plusieurs captures d'écran] [1]..

Exemple

 // Définit les arguments. Par souci de brièveté du code, j'utiliserai la plupart des valeurs par défaut $ args = array ('slug' => 'Desk Mess en miroir', 'fields' => array ('screenshot_url' => true)); // Demande et extraction du plug-in objet $ response = wp_remote_post ('http://api.wordpress.org/themes/info/1.0/', array ('body' => array ('action' => 'information_thème ',' request '=> serialize ((object) $ args)))); if (! is_wp_error ($ response)) $ theme = unserialize (wp_remote_retrieve_body ($ response)); if (! is_object ($ theme) &&! is_array ($ theme)) // Le corps de la réponse ne contient pas d'objet / tableau echo "Une erreur est survenue";  else // Désinfecter les données: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Affiche l'évaluation du thème, une capture d'écran et un lien vers l'aperçu du thème echo "Ce thème a été noté $ rating%. Afficher un aperçu"; écho ""; else // Un objet d'erreur a renvoyé echo" Une erreur est survenue ";

Dans ces exemples, j'ai utilisé (pour la plupart) les champs par défaut - mais dans le but de sauvegarder ce petit peu de bande passante, vous devez indiquer explicitement quels champs vous voulez et ne pas vouloir.


Caching

C’est un excellent exemple d’endroit où la mise en cache, en particulier les transitoires, peut (et devrait) être utilisée. La mise en cache des données signifie que nous ne récupérerons pas les informations du référentiel à chaque chargement de page, ce qui ralentirait le chargement du site. À titre d’exemple simple, lorsque j’ai exécuté l’exemple ci-dessus sans le mettre en cache, il fallait 0,522 seconde pour récupérer les données (ce qui est respectable). Une fois que j'ai commencé à utiliser des transitoires, il est tombé à 0,001 seconde. En tout cas nous ne faisons pas avoir besoin obtenir cette information à chaque chargement de page - en fait, il y a peu de raisons de mettre à jour ces données plus d'une fois par jour (ou peut-être plus longtemps).

Si vous ne savez pas comment utiliser les transitoires, vous pouvez les lire dans cet article..

Implémentons les transitoires dans une fonction générique qui récupérera les informations de thème, à partir d'un thème spécifique (et d'autres arguments):

 / ** * Retourne un objet de thème étant donné un tableau $ args ou un objet WP_Error en cas d'erreur * $ args doit contenir une clé 'slug' avec le nom du thème * et une clé 'fields' contenant un tableau de champs à récupérer. * / function sh_get_theme_information ($ args) // Définit le $ request tableau $ request = array ('corps' => array ('action' => 'information_thème', 'request' => serialize ((objet) $ args) )); // Génère une clé de cache qui contiendrait la réponse à cette demande: $ key = 'sh_theme _'. Md5 (serialize ($ request)); // Vérifier les transitoires. Si c'est le cas, utilisez-le sinon récupérez-le si (false === ($ theme = get_transient ($ key))) // Thème introuvable. Nous devons le récupérer à nouveau $ response = wp_remote_post (' http://api.wordpress.org/themes/info/1.0/',,$request); if (is_wp_error ($ response)) renvoie $ réponse; $ theme = unserialize (wp_remote_retrieve_body ($ réponse)); if (! is_object ($ theme) &&! is_array ($ theme)) renvoie new WP_Error ('theme_api_error', 'Une erreur inattendue s'est produite'); // Défini transitoire pour la prochaine fois… conservez-le pendant 24 heures devrait être bon set_transient ($ key, $ theme, 60 * 60 * 24);  return $ theme; 

Pour utiliser cette fonction:

 // Définit les arguments. Par souci de brièveté du code, je vais simplement utiliser (principalement) les valeurs par défaut $ args = array ('slug' => 'Desk Mess en miroir', 'fields' => array ('screenshot_url' => true)); // Récupère le thème $ theme = sh_get_theme_information ($ args); // Affiche des informations sur le thème (ou un message d'erreur). if (is_wp_error ($ theme)) echo 'Une erreur inattendue s'est produite';  else // Désinfecter les données: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Afficher la note du thème, la capture d'écran et le lien de prévisualisation echo "Ce thème a été noté $ rating%. Afficher un aperçu"; écho "";

Le modèle de base pour récupérer des données à partir de n'importe quelle API est globalement identique. Transformez une demande en une unique permettant de mettre en cache les résultats. Ensuite, vérifiez si des données existent pour la clé. Si c'est le cas, nous pouvons simplement renvoyer ces données. Sinon, récupérez les données à distance. Une fois que vous avez reçu la réponse, recherchez les erreurs et, s’il n’ya aucune mise à jour du transitoire, renvoyez les données récemment extraites..

Dans un deuxième exemple, nous pouvons construire une fonction qui retourne un tableau de plug-ins d'un auteur particulier:

 function sh_get_plugins_by_author ($ author = ") if (vide ($ author)) renvoie false; $ key = sanitize_key ('sh_plugins _'. $ author); if (false === ($ plugins = get_transient ($ key))) $ args = array ('auteur' => $ author, 'champs' => array ('téléchargé' => true, 'downloadlink' => true)); $ response = wp_remote_post ('http: //api.wordpress .org / plugins / info / 1.0 / ', array (' body '=> array (' action '=>' query_plugins ',' request '=> serialize ((object) $ args)))); $ plugin_response = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ plugin_response-> plugins; // Définir un transitoire pour la prochaine fois… le conserver pendant 24 heures devrait être bon set_transient ($ key, $ plugins, 60 * 60 * 24); $ plugins;

(Bien sûr, vous pouvez toujours utiliser l’API WordPress conjointement avec mise en cache souple, dont j'ai parlé dans cet article).

Vous pouvez voir une démonstration en direct de l'utilisation de l'API WordPress Repository sur la page des plug-ins WordPress de mon site..