Téléchargement de photos via XML-RPC et PHP vers WordPress

Supposons que vous connaissez le protocole XML-RPC et son fonctionnement, même sous WordPress, et que vous l'avez déjà utilisé. Ajout de publications, suppression de pages, etc. Tout va bien avec du texte, mais que se passe-t-il lorsque vous souhaitez envoyer des fichiers tels que des images vers WordPress?

Dans ce didacticiel, nous allons examiner un moyen très simple d’envoyer une photo à WordPress afin qu’elle apparaisse dans la section relative aux médias du panneau de l’administrateur. Nous allons utiliser PHP pour envoyer cette image, afin que vous puissiez utiliser ce code pour un plugin WordPress, un thème ou même tout simplement PHP, comme dans notre exemple..


Étape 1 Le plan

Juste pour donner une idée générale de ce que nous allons faire et de la façon dont nous allons le faire, je vais commencer ce tutoriel avec un plan. Fondamentalement, nous allons créer un script PHP qui télécharge un fichier (une image jpeg pour être plus précis) sur une installation WordPress locale..

Nous allons utiliser une bibliothèque PHP qui crée le client XML-RPC en PHP, que nous allons utiliser pour nous connecter au serveur WordPress XML-RPC et envoyer nos données. Ce client est une bibliothèque PHP appelée "La bibliothèque Incutio XML-RPC pour PHP" et est accessible à l'adresse scripts.incutio.com.

Notez s'il vous plaît: Cet exemple est destiné uniquement à la démonstration de ce didacticiel et constitue un exemple très basique et direct.


Étape 2 Préparer l'environnement

Pour ce tutoriel, la première chose dont vous avez besoin est une version de WordPress opérationnelle sur un serveur Apache sur lequel PHP et MySQL sont installés. Vous pouvez également avoir ceci localement, ce que je recommande et qui est en fait l'exemple que nous allons utiliser dans ce tutoriel..

Une autre chose dont vous avez besoin est la bibliothèque XML-RPC que nous utilisons pour ce tutoriel. La bibliothèque est gratuite, sous licence BSD, et peut être trouvée sur scripts.incutio.com

La bibliothèque est en fait juste un fichier PHP nommé IXR_Library.php que nous allons utiliser dans ce tutoriel. La prochaine chose à faire est de créer un répertoire dans votre htdocs (ou racine Web) de l’installation de votre serveur local où vous allez copier le IXR_Library.php déposer et aussi créer un index.php déposer à côté. le index.php le fichier doit être vide pour l'instant.

L'activation du service XML-RPC est essentielle dans l'installation de WordPress. WordPress a désactivé cette option par défaut. Nous devons donc activer les paramètres dans le panneau d'administration et l'activer. Pour ce faire, allez à Réglages -> L'écriture et juste sous la Publication à distance titre, vous trouverez XML-RPC avec à côté une case à cocher désélectionnée par défaut. Sélectionnez-le et cliquez sur enregistrer les modifications.

Nous sommes maintenant en mesure de communiquer au serveur XML-RPC que WordPress a intégré.


Étape 3 Le code, expliqué

Voici la partie amusante alors allons-y! Ouvrez le index.php fichier mentionné plus tôt avec votre éditeur de code préféré.

Y compris la bibliothèque

La première chose à faire est d’inclure le fichier de bibliothèque que nous venons de télécharger afin que nous puissions l’utiliser plus tard. Donc on édite le index.php fichier et nous ajoutons le code suivant (n'oubliez pas de commencer par une balise PHP comme dans l'exemple):

 

Cela couvrira essentiellement tout ce que nous devons utiliser pour que notre script fonctionne. En un mot, nous allons utiliser la partie client de la bibliothèque que nous venons d'inclure. Nous ferons cela dans un instant.

Lecture de l'image (fichier jpeg)

Parce que nous avons besoin d’envoyer une image (un fichier jpg) à WordPress, nous devons l’envoyer en quelque sorte. La solution l'envoie sous forme de bits, comme vous le verrez plus tard, la fonction serveur XML-RPC le demande. Mais pour l'envoyer comme cela, nous devons convertir son contenu en bits et, pour ce faire, nous devons en obtenir le contenu. Le fichier (tout fichier image au format jpg, nous le nommerons test.jpg), sera placé juste à côté du index.php fichier (dans le même répertoire) et dans la partie suivante, nous allons lire son contenu et les stocker dans une variable pour une utilisation ultérieure.

 $ myFile = "test.jpg"; $ fh = fopen ($ myFile, 'r'); $ fs = taille du fichier ($ monFichier); $ theData = fread ($ fh, $ fs); fclose ($ fh);

Ce que le code ci-dessus fait, en premier lieu, il crée une nouvelle variable nommée $ myfile avec la valeur de chaîne du nom du fichier, qui, puisqu'il se trouve dans le même dossier, ne nécessite aucune autre information de chemin d'accès, mais uniquement son nom, dans ce cas, test.php.

Ensuite, nous devons ouvrir le fichier, nous le faisons donc avec la fonction PHP fopen, que nous utilisons avec le premier paramètre de la variable précédente, $ myFile et le second paramètre est une autre chaîne qui indique l'opération que nous allons effectuer sur le fichier. La valeur de chaîne de r veux dire en train de lire. Nous allons ajouter le résultat du fichier ouvert à la variable $ fh.

Ensuite, comme nous avons besoin de la longueur du contenu du fichier, nous allons créer la variable $ fs avec la valeur renvoyée par la fonction PHP $ taille de fichier, fonction qui utilise le paramètre, $ myFile

Enfin, nous arrivons à la partie lecture où nous donnons la variable $ theData la valeur renvoyée par la fonction qui effectue la lecture, à savoir fread. Cette fonction utilise deux paramètres, le premier est la variable de fichier précédemment ouverte ($ fh) et le second correspond à la taille de fichier précédemment définie ($ fs).

Enfin, nous fermons le fichier ouvert en utilisant la fonction fermer et son paramètre $ fh. À ce stade, nous avons le contenu du fichier jpg, que nous allons envoyer au serveur XML-RPC de WordPress.

Création du client XML-RPC

Dans cette prochaine partie, nous utiliserons la bibliothèque que nous venons d’importer pour nous connecter au serveur XML-RPC de notre installation WordPress. Pour ce faire, nous aurons besoin des 3 variables suivantes:

  • $ usr (avec le nom d'utilisateur du panneau d'administration), $ pwd(le mot de passe du panneau d'administration) et
  • $ xmlrpc (le chemin du serveur XML-RPC). Notez que le chemin du serveur XML-RPC est constitué de l’URL d’installation de base de WordPress + le xmlprc.php déposer à la fin après la barre oblique.
 $ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = new IXR_Client ($ xmlrpc);

Ensuite, nous devons créer l'appel au serveur. Pour cela, nous allons utiliser la chaîne d'URL que nous venons de créer et le IXR_Client classe que nous héritons du fichier de bibliothèque importé. À ce stade, la variable $ client est déclaré comme un nouveau client pour ce lien et toutes les opérations vont être effectuées en l'utilisant.

Cette partie suivante est optionnelle, mais juste au cas où vous le souhaiteriez, vous pouvez activer le débogage comme ceci:

 $ client-> debug = true;

Si vous l'activez, vous aurez une vision plus claire de ce qui se passe si quelque chose ne va pas.

Placer les données à sa place

Avant d'envoyer les données, nous devons les organiser et les formater correctement, et en raison de la manière dont nous devons les envoyer, nous devons créer un tableau avec toutes les valeurs. Appelons ce tableau $ params et lui donner les valeurs suivantes:

 $ params = array ('name' => 'test.jpg', 'type' => 'image / jpg', 'bits' => new IXR_Base64 ($ theData), 'overwrite' => false);

Tout d'abord, nous devons donner le nom d'index de tableau de prénom la valeur de 'test.jpg, comme cela va être le nom du fichier. Après cela, nous avons le nom de l'index type, que nous donnons la valeur de image / jpg. C'est le type de fichier que nous mettons en ligne. Ensuite, nous avons l'index nommé morceaux c'est en fait le fichier que nous devons envoyer. Désormais, l’API WordPress XML-RPC nécessite l’envoi de cette valeur au format 64 bits de base. Pour faire cela correctement, nous allons utiliser la variable $ theData, mais nous devrons l'exécuter dans la classe IXR_Base64 de sorte qu'il soit codé en conséquence dans base64 morceaux. Il est très important que le codage base64 soit correctement formaté pour que le fichier soit correctement envoyé au serveur tel qu'il a été demandé. Il existe différents encodages Base64 et si l’on utilise le mauvais, il y aura inévitablement une erreur. le IXR_Base64 La classe utilisée dans l'exemple ci-dessus convertit le contenu du fichier exactement comme le serveur le demande. Enfin, le type d'index écraser est défini sur false, donnant la propriété false à l'option de remplacement des fichiers existants portant le même nom.

Envoi des données via XML-RPC

La dernière chose à faire pour que ce script fonctionne est d’envoyer les données à WordPress en activant une requête du $ client variable comme si:

 $ res = $ client-> query ('wp.uploadFile', 1, $ usr, $ pwd, $ params);

le $ res variable est donné le résultat de la question fonction appelée depuis l'intérieur du $ client variable qui représente l'implémentation du client XML-RPC déclarée et initiée à l'origine. Fondamentalement, nous envoyons une demande au serveur. Le serveur recevra une requête avec les paramètres suivants:

  • wp.uploadFile - la fonction de service requise que nous appelons et que nous utilisons pour télécharger le fichier
  • 1 - l'identifiant du blog (chaque blog WordPress a un identifiant, la valeur par défaut est 1
  • $ usr - La variable de nom d'utilisateur précédemment déclarée.
  • $ pwd - La variable mot de passe précédemment déclarée.
  • $ params - La gamme de paramètres dont nous venons de parler.

Le code complet

Tout le code ci-dessus mis en place ressemblerait à ceci:

 debug = true; $ params = array ('name' => 'test.jpg', 'type' => 'image / jpg', 'bits' => new IXR_Base64 ($ theData), 'overwrite' => false); $ res = $ client-> query ('wp.uploadFile', 1, $ usr, $ pwd, $ params); ?>

Conclusion

Ce n'est pas difficile d'implémenter un tel client, mais comme le code que vous êtes censé construire est parfois spécifique, vous devez savoir ce que vous faites pour pouvoir obtenir l'effet souhaité. L’implémentation du client XML-RPC en PHP pour une demande de serveur de téléchargement de fichiers WordPress XML-RPC en est un exemple. Si les données que vous envoyez ne sont pas correctement formatées, elles risquent de ne pas être acceptées. Cet exemple ne représente que quelques lignes de code, mais il est très spécifique. Le même client peut être utilisé pour faire tout autre type de
requête à WordPress utilisant différentes fonctions de requête XML-RPC avec les paramètres appropriés.