Créer des plugins WordPress avec des techniques de POO

Le code orienté objet, entre autres choses, peut aider à organiser et à ajouter de la réutilisabilité à votre code. Dans ce tutoriel, je vais vous apprendre les bases de l'écriture d'un plugin WordPress en utilisant des techniques orientées objet. Nous allons utiliser l'API de Dribbble comme exemple pour ce tutoriel. Prêt?


Ce que nous allons apprendre:

  • Avantages de l'utilisation des plug-ins POO pour WordPress.
  • Comment configurer un shortcode.
  • Comment configurer une balise template.
  • Comment activer le shortcode dans les widgets WordPress.
  • Exemple concret en utilisant l'API de Dribbble.

Pourquoi utiliser la POO?

Avant de poursuivre avec ce didacticiel, vous devez au moins avoir une compréhension élémentaire de l’écriture d’un plugin WordPress. Jonathan a écrit un tutoriel incroyable sur "Comment écrire un plugin WordPress". Lui donner une lecture.

Créer des plugins WordPress avec du code orienté objet est assez efficace et ordonné, comparé à l’utilisation de code procédural. Il est plus facile de gérer la base de code et de l'étendre à l'aide de techniques d'héritage, ce qui peut s'avérer particulièrement utile lors de l'écriture d'un gros plugin..


Dribbble

Pour écrire un plugin WordPress, nous avons d’abord besoin de sens. Nous allons écrire un plugin qui affichera les derniers plans de Dribbble, en utilisant leur API REST. Nous ajouterons ensuite le support du shortcode pour les publications et les widgets, ainsi que la balise de modèle pour les thèmes.


Étape 1 - Configuration de la classe de plug-in

Le code orienté objet est basé sur des classes et des méthodes (fonctions). Créons notre classe principale, qui interagira avec les filtres et les points d'ancrage de WordPress.

 classe WPDribbble fonction publique __construct ()  $ wpDribbble = new WPDribbble ();

Les classes PHP ont une fonction constructeur, __construction, qui est exécuté dès qu'une nouvelle instance d'une classe est instanciée. Tous les filtres et crochets WordPress seront enregistrés sous le constructeur de notre classe de plugin. Permet d'avancer et d'enregistrer un shortcode pour notre plugin. le add_shortcode () fonction / hook passera sous la fonction constructeur.

La nouvelle instance d’une classe / objet est enregistrée à l’aide du Nouveau mot-clé. Reportez-vous à la dernière ligne du code ci-dessous.

 classe WPDribbble fonction publique __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode'));  fonction publique shortcode ()  $ wpDribbble = new WPDribbble ();
  • add_shortcode - Le premier paramètre est la balise shortcode et le second est la fonction de rappel.

Remarquez comment nous utilisons un tableau dans le paramètre de fonction de rappel? Pour enregistrer des fonctions de rappel dans un objet, nous devons utiliser un tableau.

Le premier élément du tableau référence l'objet, via $ this. Le deuxième élément de la tableau est le nom de la méthode dans la classe. Tous les hooks et filtres doivent être référencés de la sorte quand ils sont dans une classe.

Encore confus?

 # 1. Utilisation standard add_shortcode ('shortcode_name', 'shortcode_func'); function shortcode_func () // Le contenu de cette fonction sera exécuté lorsque le blogueur // utilisera le shortcode [nom_courton].  # 2. Avec PHP 5.3, nous pouvons passer une fonction anonyme. add_shortcode ('shortcode_name', function () // Le contenu de cette fonction sera exécuté lorsque le blogueur // utilisera le shortcode [nomcode abrégé].); # 3. Dans une classe, classe WPDribbble fonction publique __construct () add_shortcode ('Dribbble', array ($ this, 'shortcode'));  public function shortcode () // Le contenu de cette fonction sera exécuté lorsque le blogueur // utilisera le shortcode [nom_courton]. 

Étape 2 - Classe d'API Dribbble

Comme nous n’avons actuellement besoin d’aucune fonction API sophistiquée, nous allons créer un wrapper d’API assez simple pour Dribbble. Il existe déjà une bibliothèque disponible pour Dribbble, mais, dans l’intérêt de ce tutoriel, nous allons écrire la nôtre. Cela vous aidera à comprendre les concepts de ce tutoriel..

Nous allons écrire un DribbbleAPI objet, et enregistrer un méthode appelé getPlayerShots () pour interagir avec l'API de Dribbble et renvoyer une tableau des derniers coups.

Créons un nouveau fichier pour cette classe, appelé DribbbleAPI.php

 class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // nom d'utilisateur ou identifiant utilisateur Dribbble protected $ user; 

Ci-dessus, nous mettons en place deux variables de classe.

  • $ apiUrl - Le lien vers l'API Dribbble, où les appels seront envoyés.
  • $ utilisateur - Le nom d'utilisateur ou l'ID utilisateur d'un utilisateur Dribbble. Cette valeur sera définie depuis le constructeur (__construction) méthode.
 class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // nom d'utilisateur ou identifiant utilisateur Dribbble protected $ user; fonction publique __construct ($ user) $ this-> user = $ user; 

Le constructeur est passé un $ utilisateur variable, qui est ensuite transmise par le constructeur à la propriété de classe, appelée utilisateur.

Nous préfixons la propriété ou le nom de la variable avec Publique pour spécifier que la valeur de cette propriété peut être extraite de l'extérieur du classe. Si nous souhaitons plutôt limiter l'accès à la propriété à cette seule classe, et peut-être tout classees qui en héritent, nous utiliserions le protégé préfixe. Cette pratique est appelée encapsulation.

Nous avons la base prête pour notre wrapper API Dribbble. Maintenant, nous allons écrire un nouveau méthode, appelé getPlayerShots (). Le but de ceci méthode sera d'interroger l'API et de convertir le résultat en un tableau pour une utilisation dans notre plugin.

 class DribbbleAPI // url to Dribbble api protected $ apiUrl = 'http://api.dribbble.com/'; // nom d'utilisateur ou identifiant utilisateur Dribbble protected $ user; fonction publique __construct ($ user) $ this-> user = $ user;  fonction publique getPlayerShots ($ perPage = 15) $ user = $ this-> user; $ json = wp_remote_get ($ this-> apiUrl. 'players /'. $ user. '/ shots? per_page ='. $ perPage); $ array = json_decode ($ json ['body']); $ shots = $ array-> shots; retourner $ coups; 

En savoir plus sur wp_remote_get.

le getPlayerShots fonction renvoie l'utilisateur de la variable de classe. Il utilise WordPress ' wp_remote_get fonction pour interroger l'API Dribbble. L’API répond ensuite à notre requête par une chaîne JSON, qui est ensuite analysée dans une tableau et renvoyé à la fonction en utilisant le revenir mot-clé.

C’est tout ce dont nous avons besoin de l’API pour le moment - simplement un tableau des coups de joueur. Si nous avons besoin de plus de fonctionnalités à l’avenir, nous pouvons en ajouter davantage. méthodes au courant classe, ou créer un nouveau classe cela étend celui-ci. Encore une fois, cela s'appelle l'héritage.


Étape 3 - Intégration du DribbbleAPI Classe

C'est la partie amusante; le fraîchement cuit DribbbleAPI classe entrera en service. Nous allons passer en revue les plans retirés de l’API et générer un html liste des prises de vues, qui seront transmises au shortcode et à la balise de modèle. Pendant la boucle, les images Dribbble de taille normale seront mises en cache et enregistrées dans le dossier du plug-in, et les vignettes seront générées à l'aide de TimThumb..

Pour déterminer si les images complètes sont déjà stockées localement, le chemin du plugin est requis. De plus, pour générer les vignettes avec timthumb, la URL du plugin est requis. Pour cela, nous allons créer deux variables de classe appelées pluginPath et pluginURL dans notre WPDribbble classe, puis définissez leurs valeurs depuis le constructeur méthode.

Paramétrer PluginPath et PluginUrl

 classe WPDribbble protected $ pluginPath; protected $ pluginUrl; fonction publique __construct () // Définir le chemin du plugin $ this-> pluginPath = dirname (__ FILE__); // Définir l'URL du plugin $ this-> pluginUrl = WP_PLUGIN_URL. '/ wp-Dribbble'; add_shortcode ('Dribbble', tableau ($ this, 'shortcode')); 

getImages () Méthode

Créer un nouveau méthode dans le WPDribbble classe, appelé getImages.

À l'intérieur d'un classe, vous pouvez utiliser des noms génériques pour les fonctions. Ils ne seront pas en conflit avec d'autres plugins ou les fonctions intégrées de WordPress, car ils sont sous la classe espace de noms.

 fonction publique getImages ($ utilisateur, $ images = 3, $ largeur = 50, $ hauteur = 50, $ caption = true) 
  • $ utilisateur - Nom d'utilisateur ou ID d'utilisateur de Dribbble. $ utilisateur sera utilisé lors de l'enregistrement d'une nouvelle instance du DribbbleAPI classe.
  • $ images - Nombre d'images à rendre. $ images sera utilisé lors de l'interrogation de l'API via le getPlayerShots méthode.
  • $ width et $ height - Timthumb sera utilisé pour générer des vignettes.
  • $ légende - Option de rendu du titre d'une image.

Ensuite, nous allons inclure le DribbbleAPI classe dans le getImages () fonction et créer une nouvelle instance pour saisir les images.

 fonction publique getImages ($ utilisateur, $ images = 3, $ largeur = 50, $ hauteur = 50, $ caption = vrai) include 'DribbbleAPI.php'; $ DribbbleAPI = new DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ images); si ($ coups) 

le $ coups la variable dans le code est remplie avec un tableau de trois récents Dribbbles du $ utilisateur.

Comme mentionné précédemment, nous allons faire une boucle à travers le $ coups tableau, et enregistrez les images en taille réelle localement à des fins de mise en cache. Les images en cache seront utilisées avec TimThumb pour servir les vignettes. Pour stocker des images complètes et des vignettes générées par TimThumb, créez deux dossiers. Nous allons utiliser images complètes / pour stocker les images en taille réelle, et cache / pour les vignettes, puisqu'il s'agit du nom de dossier par défaut pour TimThumb.

Le code HTML de la liste sera généré dans le $ coups boucle.

 fonction publique getImages ($ utilisateur, $ images = 3, $ largeur = 50, $ hauteur = 50, $ caption = vrai) include 'DribbbleAPI.php'; $ DribbbleAPI = new DribbbleAPI ($ user); $ shots = $ DribbbleAPI-> getPlayerShots ($ images); if ($ shots) $ html [] = '
    '; foreach ($ shots as $ shot) $ image = $ shot-> image_url; // url de l'image $ fileName = $ shot-> id. '.png'; // génération d'un nom de fichier image_id.png if (! file_exists ($ this-> pluginPath. '/ full-images /'. $ FileName)) // vérifie si l'image complète existe $ rawImage = wp_remote_get ($ image); // récupère l'image $ newImagePath = $ this-> pluginPath. '/ images complètes /'. $ NomFichier; $ fp = fopen ($ newImagePath, 'x'); fwrite ($ fp, $ rawImage ['body']); // sauvegarde l'image complète fclose ($ fp); // générer une URL miniature $ localImage = $ this-> pluginUrl. '/timthumb.php?src='. strstr ($ this-> pluginPath, 'wp-content'). '/ images complètes /'. $ NomFichier. '& w ='. $ largeur. '& h ='. $ hauteur. '& q = 100'; if ($ caption) // si légende est vraie $ captionHTML = '

    '. $ shot-> titre. '

    '; // combinez l'url du titre, le titre et la vignette pour les ajouter à la liste ul $ html [] = '
  • url. '"titre ="'. $ shot-> titre. '">' . $shot->Titre . ''.$captionHTML.'
  • '; $ html [] = '
'; return implode ("\ n", $ html);

Ajout de cours

C'est toujours une bonne idée d'ajouter des classes à chaque élément de votre plugin. Cela offre aux utilisateurs avancés de votre plugin la liberté de le personnaliser. Évitez d'utiliser des CSS en ligne pour le contenu généré par votre plugin..


Étape 4 - Configuration du Shortcode

Comme son nom l'indique, les codes abrégés permettent aux utilisateurs d'ajouter facilement un contenu complexe dans les articles de blog..

Nous avons déjà le add_shortcode crochet prêt dans notre constructeur de classe de plugin. Maintenant, nous allons écrire le shortcode méthode à l'intérieur de notre classe, qui va extraire les attributs de shortcode et renvoyer les images Dribbble en utilisant le getImages () méthode.

Nous appellerons notre shortcode [Dribbble]. Comme mentionné précédemment, le nom du shortcode est déterminé par le premier paramètre de la add_shortcode une fonction. Il sera utilisé avec les attributs requis pour la getImages () méthode. Par exemple: [Utilisateur de Dribbble = images haris = 5 largeur = 100 hauteur = 100 légende = vrai].

 fonction publique shortcode ($ atts) // extrait les attributs en variables extract (shortcode_atts (array ('images' => 3, 'width' => 50, 'height' => 50, 'caption' => true,) , $ atts)); // passe les attributs à la fonction getImages et rend les images retournent $ this-> getImages ($ atts ['user'], $ images, $ width, $ height, $ caption); 

Ajouter un support Shortcode pour WordPress Widgets

Par défaut, les widgets WordPress ne prennent pas en charge les codes abrégés, mais en utilisant le widget_text filtrer, on peut forcer le support du shortcode dans les widgets WordPress.

Nous pouvons ajouter le filtre dans notre WPDribbble constructeur d'objet.

 fonction publique __construct () // Définir le chemin du plugin $ this-> pluginPath = dirname (__ FILE__); // Définir l'URL du plugin $ this-> pluginUrl = WP_PLUGIN_URL. '/ wp-Dribbble'; add_shortcode ('Dribbble', tableau ($ this, 'shortcode')); // Ajout du support de shortcode pour les widgets add_filter ('widget_text', 'do_shortcode'); 

Étape 5: Configuration de la balise de modèle

La balise template peut être utilisée directement dans les thèmes WordPress. L’objet de base de la balise modèle sera de créer une nouvelle instance de notre WPDribbble classe et appelez le getImages () méthode. La balise template sera une simple fonction PHP qui doit être enregistrée en dehors du plugin. classe. Il doit avoir un nom unique. sinon, il sera en conflit avec des fonctions / plugins avec un nom similaire. Depuis notre plugin s'appelle WP-Dribbble, nous appellerons la balise template, wp_Dribbble ().

 fonction wp_Dribbble ($ utilisateur, $ images = 3, $ largeur = 50, $ hauteur = 50, $ caption = true) $ wpDribbble = new WPDribbble; echo $ wpDribbble-> getImages ($ utilisateur, $ images, $ largeur, $ hauteur, $ légende); 

Voila!

Toutes nos félicitations! Vous avez réussi à écrire un plugin WordPress avec la POO. Si vous avez des questions, faites-le moi savoir et je ferai de mon mieux pour vous aider?