Caricamento di immagini tramite XML-RPC e PHP in WordPress

Diciamo che hai familiarità con il protocollo XML-RPC e come funziona, anche in WordPress, e lo hai già usato in precedenza. Aggiungere post, eliminare pagine, ecc. Tutto va bene con il testo ma cosa succede quando si desidera inviare file come immagini a WordPress?

In questo tutorial daremo un'occhiata a un modo molto semplice per inviare un'immagine a WordPress, in modo che si presenti nella sezione media del pannello di amministrazione. Useremo PHP per inviare questa immagine, in modo che tu possa usare questo codice per un plugin, un tema o anche solo per PHP, come nel nostro esempio.


Step 1 The Plan

Solo per dare un'idea generale di cosa faremo e di come lo faremo, inizierò questo tutorial con un piano. Fondamentalmente creeremo uno script PHP che carica un file (un'immagine jpeg per essere più precisi) in un'installazione locale di WordPress.

Utilizzeremo una libreria PHP che crea il client XML-RPC in PHP, che useremo per connettersi al server XML-RPC di WordPress e inviare i nostri dati. Questo client è una libreria PHP chiamata "The Incutio XML-RPC Library per PHP" e può essere trovata su scripts.incutio.com

Notare che: Questo esempio è solo a scopo dimostrativo di questo tutorial ed è un esempio molto semplice e diretto


Passaggio 2 Preparazione dell'ambiente

Per questo tutorial, la prima cosa di cui hai bisogno è una versione funzionante di WordPress su un server Apache con PHP e MySQL installati. Puoi anche avere questo a livello locale, che consiglio ed è in realtà l'esempio che useremo in questo tutorial.

Un'altra cosa che ti serve è la libreria XML-RPC che stiamo usando per questo tutorial. La Biblioteca è gratuita, sotto una licenza BSD, e può essere trovata su scripts.incutio.com

La libreria è in realtà solo un file PHP chiamato IXR_Library.php che useremo in questo tutorial. La prossima cosa che devi fare è creare una directory nel tuo htdocs (o web root) della propria installazione del server locale in cui verrà copiato il file IXR_Library.php file e anche creare un index.php file accanto ad esso. Il index.php il file deve essere vuoto per ora.

La cosa più importante che dobbiamo fare nell'installazione di WordPress è l'attivazione del servizio XML-RPC. WordPress lo ha disattivato di default quindi dobbiamo andare nelle impostazioni nel pannello di amministrazione e attivarlo. Per fare questo, andare a impostazioni -> scrittura e proprio sotto il Pubblicazione remota titolo troverai XML-RPC con una casella accanto ad essa che è deselezionata per impostazione predefinita. Selezionalo e fai clic su Salva modifiche.

Ora siamo in grado di comunicare con il server XML-RPC integrato da WordPress.


Passaggio 3 Il codice, spiegato

Ecco la parte divertente, quindi cominciamo subito! Apri il index.php file menzionato in precedenza con il tuo editor di codice preferito.

Compresa la libreria

La prima cosa che dobbiamo fare è includere il file della libreria che abbiamo appena scaricato in modo che possiamo usarlo in seguito. Quindi modifichiamo il index.php file e aggiungiamo il seguente codice (non dimenticare di iniziare con un tag PHP come nell'esempio):

 

Questo fondamentalmente coprirà tutto ciò di cui abbiamo bisogno per far funzionare il nostro script. In breve, useremo la parte client della libreria che abbiamo appena incluso. Lo faremo in un attimo.

Leggere l'immagine (file Jpeg)

Perché abbiamo bisogno di inviare un'immagine (un file jpg) su WordPress, abbiamo bisogno di inviarlo in qualche modo. La soluzione lo sta inviando in un formato bit, proprio come vedrai in seguito, la funzione del server XML-RPC lo richiede. Ma per inviarlo in questo modo è necessario convertire il contenuto in bit, e per farlo dobbiamo ottenere il suo contenuto. Il file (qualsiasi file di immagine jpg, lo chiameremo test.jpg), verrà posizionato proprio accanto al file index.php file (nella stessa directory) e in questa parte successiva, leggiamo i suoi contenuti e li memorizziamo in una variabile per un uso successivo.

 $ myFile = "test.jpg"; $ fh = fopen ($ myFile, 'r'); $ fs = filesize ($ mioFile); $ theData = fread ($ fh, $ fs); fclose ($ FH);

Cosa fa il codice precedente, in primo luogo, crea una nuova variabile chiamata $ myfile con il valore stringa del nome del file, che, poiché si trova nella stessa cartella, non richiede altre informazioni sul percorso, solo il nome, in questo caso, test.php.

Quindi dobbiamo aprire il file, quindi lo facciamo con la funzione PHP fopen, che usiamo con il primo parametro della variabile precedente, $ myFile e il secondo parametro un'altra stringa che indica l'operazione che andremo a fare sul file. Il valore stringa di r si intende lettura. Aggiungeremo il risultato del file aperto alla variabile $ fh.

Quindi, poiché richiediamo la lunghezza del contenuto del file, creeremo la variabile $ fs con il valore restituito dalla funzione PHP $ filesize, funzione che utilizza il parametro, $ myFile

Infine, arriviamo alla parte di lettura, dove diamo la variabile $ theData il valore restituito dalla funzione che legge, cioè fread. Questa funzione utilizza due parametri, il primo è la variabile di file precedentemente aperta ($ fh) e la seconda è la dimensione del file precedentemente impostata ($ fs).

Infine, chiudiamo il file aperto usando la funzione fclose e il suo parametro $ fh. A questo punto, abbiamo il contenuto del file jpg, che stiamo per inviare al server XML-RPC di WordPress.

Creazione del client XML-RPC

In questa parte successiva useremo la libreria che abbiamo appena importato per connetterci al nostro server XML-RPC di installazione di WordPress. Per fare ciò avremo bisogno delle seguenti 3 variabili:

  • $ usr (con il nome utente del pannello di amministrazione), $ pwd(la password del pannello di amministrazione) e
  • $ XMLRPC (il percorso del server XML-RPC). Nota, il percorso del server XML-RPC è costituito dall'URL di installazione di WordPress di base + xmlprc.php file alla fine dopo la barra.
 $ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = nuovo IXR_Client ($ xmlrpc);

Quindi dobbiamo creare la chiamata al server. Per questo useremo la stringa URL che abbiamo appena creato e la IXR_Client classe che ereditiamo dal file di libreria importato. A questo punto, la variabile $ cliente viene dichiarato come nuovo client per quel collegamento e tutte le operazioni verranno eseguite utilizzando questo.

Questa prossima parte è facoltativa, ma nel caso lo si desideri, è possibile attivare il debug in questo modo:

 $ client-> debug = true;

Se lo attivi, otterrai una visione più chiara di ciò che accade se qualcosa va storto.

Inserimento dei dati al suo posto

Prima di inviare i dati, dobbiamo organizzarli e formattarli correttamente e, a causa del modo in cui ci viene richiesto di inviarli, dobbiamo creare un array con tutti i valori. Diamo un nome a questo array $ params e dargli i seguenti valori:

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

Per prima cosa, dobbiamo dare il nome dell'indice dell'array di nome il valore di 'test.jpg, come questo sarà il nome del file. Dopo questo abbiamo il nome dell'indice genere, che diamo il valore di image / jpg. Questo è il tipo di file che stiamo caricando. Quindi abbiamo l'indice chiamato bit questo è in realtà il file che dobbiamo inviare. Ora, l'API XML-RPC di WordPress richiede che questo valore sia inviato come base 64 bit. Per farlo correttamente useremo la variabile $ theData, ma dovremo eseguirlo attraverso la classe IXR_Base64 in modo che sia codificato di conseguenza in Base64 bit. È molto importante che la codifica base64 sia formattata correttamente affinché il file possa essere inviato correttamente al server come richiesto. Ci sono diverse codifiche Base64 e se viene usato quello sbagliato ci sarà inevitabilmente un errore. Il IXR_Base64 la classe utilizzata nell'esempio precedente sta convertendo il contenuto del file esattamente come il server lo richiede. Infine, il tipo di indice sovrascrivere è impostato su false, dando la proprietà di false all'opzione di sovrascrivere i file esistenti con lo stesso nome.

Invio dei dati tramite XML-RPC

L'ultima cosa che dobbiamo fare per far funzionare questo script è inviare i dati a WordPress attivando una richiesta dal $ cliente variabile in questo modo:

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

Il $ res variabile è dato il risultato del domanda funzione chiamata dall'interno del $ cliente variabile che rappresenta l'implementazione del client XML-RPC originariamente dichiarata e avviata. Fondamentalmente stiamo inviando una richiesta al server. Il server riceverà una richiesta con i seguenti parametri:

  • wp.uploadFile - la funzione di servizio richiesta che stiamo chiamando e utilizzando per caricare il file
  • 1 - l'ID del blog (ogni blog WordPress ha un ID, il valore predefinito è 1
  • $ usr - La variabile del nome utente precedentemente dichiarata.
  • $ pwd - La variabile password dichiarata in precedenza.
  • $ params - La serie di parametri di cui abbiamo appena parlato.

Il codice completo

Tutto il codice sopra messo insieme sarebbe simile a questo:

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

Conclusione

Non è difficile implementare un client simile, ma poiché a volte il codice che si suppone crei è specifico, è necessario sapere cosa si sta facendo in modo da ottenere l'effetto desiderato. L'implementazione del client XML-RPC in PHP per una richiesta di file server di caricamento XML-RPC di WordPress è un esempio. Se i dati che stai inviando non sono formattati correttamente, potrebbero non essere accettati. Questo esempio è solo alcune righe di codice ma è molto specifico. Lo stesso client può essere utilizzato per creare qualsiasi altro tipo di
richiedere a WordPress utilizzando diverse funzioni di richiesta XML-RPC con i parametri appropriati.