Cargar imágenes a través de XML-RPC y PHP a WordPress

Digamos que está familiarizado con el protocolo XML-RPC y cómo funciona, incluso en WordPress, y lo ha usado antes. Agregar publicaciones, eliminar páginas, etc. Todo está bien con el texto, pero ¿qué sucede cuando desea enviar archivos como imágenes a WordPress??

En este tutorial vamos a ver una manera muy fácil de enviar una imagen a WordPress, para que aparezca en la sección de medios del panel de administración. Vamos a utilizar PHP para enviar esta imagen, de modo que pueda usar este código para un complemento de WordPress, un tema, o incluso simplemente PHP simple, como en nuestro ejemplo.


Paso 1 El Plan

Solo para dar una idea general de lo que vamos a hacer y cómo lo vamos a hacer, voy a comenzar este tutorial con un plan. Básicamente, vamos a hacer un script PHP que carga un archivo (una imagen jpeg para ser más precisos) en una instalación local de WordPress.

Vamos a utilizar una biblioteca de PHP que crea el cliente XML-RPC en PHP, que utilizaremos para conectarnos al servidor de WordPress XML-RPC y enviar nuestros datos. Este cliente es una biblioteca de PHP llamada "The Incutio XML-RPC Library for PHP" y se puede encontrar en scripts.incutio.com

Tenga en cuenta: Este ejemplo es solo para fines de demostración de este tutorial y es un ejemplo muy básico y directo.


Paso 2 Preparando el Medio Ambiente

Para este tutorial, lo primero que necesita es una versión funcional de WordPress en un servidor Apache con PHP y MySQL instalados. También puede tener esto localmente, lo cual recomiendo y en realidad es el ejemplo que usaremos en este tutorial..

Otra cosa que necesita es la biblioteca XML-RPC que estamos usando para este tutorial. La biblioteca es gratuita, bajo una licencia BSD, y se puede encontrar en scripts.incutio.com

La biblioteca es en realidad solo un archivo PHP llamado IXR_Library.php que vamos a utilizar en este tutorial. Lo siguiente que debe hacer es crear un directorio en su htdocs (o raíz web) de la instalación de su servidor local donde copiará la IXR_Library.php archivo y también crear una index.php archivo junto a él. los index.php el archivo debe estar vacío por ahora.

Lo más importante que debemos hacer en la instalación de WordPress es activar el servicio XML-RPC. WordPress lo ha desactivado de forma predeterminada, por lo que debemos ingresar a la configuración en el panel de administración y activarlo. Para hacer esto, ve a Ajustes -> Escritura y justo debajo de la Publicación remota título encontrará XML-RPC con una casilla de verificación justo al lado que está deseleccionada de forma predeterminada. Selecciónelo y haga clic en guardar cambios..

Ahora, podemos comunicarnos con el servidor XML-RPC que WordPress ha incorporado.


Paso 3 El Código, Explicado

¡Aquí viene la parte divertida, así que vamos a hacerlo! Abre el index.php archivo mencionado anteriormente con su editor de código favorito.

Incluyendo la biblioteca

Lo primero que debemos hacer es incluir el archivo de la biblioteca que acabamos de descargar para que podamos usarlo más adelante. Así que editamos el index.php y agregamos el siguiente código (no olvide comenzar con una etiqueta PHP como en el ejemplo):

 

Básicamente, esto cubrirá todo lo que necesitamos usar para que nuestro script funcione. En pocas palabras, vamos a utilizar la parte del cliente de la biblioteca que acabamos de incluir. Haremos esto en un momento..

Leyendo la imagen (archivo jpeg)

Debido a que necesitamos enviar una imagen (un archivo jpg) a WordPress, debemos enviarla de alguna manera. La solución lo está enviando en un formato de bits, como verá más adelante, la función del servidor XML-RPC lo solicita. Pero para enviarlo así, necesitamos convertir su contenido en bits, y para ello necesitamos obtener su contenido. El archivo (cualquier archivo de imagen jpg, lo llamaremos test.jpg), se colocará justo al lado del index.php archivo (en el mismo directorio) y en la siguiente parte, vamos a leer su contenido y almacenarlos en una variable para su uso posterior.

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

Lo que hace el código anterior, primero, crea una nueva variable llamada $ miarchivo con el valor de cadena del nombre del archivo, que, debido a que se encuentra en la misma carpeta, no requiere ninguna otra información de ruta que se le pegue, solo el nombre, en este caso, prueba.php.

Luego necesitamos abrir el archivo, así que hacemos esto con la función PHP Fopen, Que usamos con el primer parámetro de la variable anterior., $ miArchivo y el segundo parámetro es otra cadena que indica la operación que vamos a hacer en el archivo. El valor de cadena de r medio leyendo. Agregaremos el resultado del archivo abierto a la variable. $ fh.

Entonces, debido a que requerimos la longitud del contenido del archivo, crearemos la variable $ fs con el valor devuelto por la función PHP $ tamaño de archivo, Función que utiliza el parámetro., $ miArchivo

Finalmente, llegamos a la parte de lectura, donde damos la variable. $ theData El valor devuelto por la función que realiza la lectura, es decir, temible. Esta función utiliza dos parámetros, el primero es la variable de archivo previamente abierta ($ fh) y el segundo es el tamaño de archivo previamente establecido ($ fs).

Por último, cerramos el archivo abierto utilizando la función. cerrar y su parametro $ fh. En este punto, tenemos el contenido del archivo jpg, que vamos a enviar al servidor XML-RPC de WordPress.

Creando el cliente XML-RPC

En la siguiente parte, usaremos la biblioteca que acabamos de importar para conectarnos a nuestro servidor de instalación de WordPress XML-RPC. Para ello necesitaremos las siguientes 3 variables:

  • $ usr (con el nombre de usuario del panel de administración), $ pwd(la contraseña del panel de administración) y
  • $ xmlrpc (la ruta del servidor XML-RPC). Tenga en cuenta que la ruta del servidor XML-RPC está hecha de la url de instalación básica de WordPress + la xmlprc.php archivo al final después de la barra.
 $ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = new IXR_Client ($ xmlrpc);

A continuación necesitamos crear la llamada al servidor. Para eso usaremos la cadena de URL que acabamos de crear y la IXR_Client Clase que heredamos del archivo de biblioteca importado. En este punto, la variable $ cliente se declara como un nuevo cliente para ese enlace y todas las operaciones se llevarán a cabo usándolo.

La siguiente parte es opcional, pero en caso de que lo desee, puede activar la depuración de esta forma:

 $ cliente-> debug = true;

Si lo activa, obtendrá una vista más clara de lo que está sucediendo si algo sale mal..

Colocando los datos en su lugar

Antes de enviar los datos, debemos organizarlos y formatearlos correctamente, y debido a la forma en que estamos obligados a enviarlos, debemos crear una matriz con todos los valores. Llamemos a esta matriz $ params Y dale los siguientes valores:

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

Primero, necesitamos dar el nombre del índice de matriz de nombre El valor de 'test.jpg, ya que este va a ser el nombre del archivo. Después de eso tenemos el nombre del índice. tipo, que damos el valor de imagen / jpg. Este es el tipo de archivo que estamos cargando. Luego tenemos el índice llamado pedacitos Ese es en realidad el archivo que necesitamos enviar. Ahora, la API de WordPress XML-RPC requiere que este valor se envíe como base de 64 bits. Para hacerlo correctamente utilizaremos la variable. $ theData, Pero tendremos que correrlo a través de la clase. IXR_Base64 para que se codifique en consecuencia en base64 pedacitos Es muy importante que la codificación base64 esté formateada correctamente para que el archivo se envíe correctamente al servidor como se solicitó. Hay diferentes codificaciones Base64 y si se usa la incorrecta, inevitablemente habrá un error. los IXR_Base64 La clase utilizada en el ejemplo anterior es convertir el contenido del archivo tal como lo requiere el servidor. Por último, el tipo de índice exagerar se establece en falso, dando la propiedad de falso a la opción de sobrescribir archivos existentes con el mismo nombre.

Enviando los datos a través de XML-RPC

Lo último que debemos hacer para que este script funcione es enviar los datos a WordPress activando una solicitud de $ cliente variable como tal:

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

los $ res Se le da el resultado de la variable. consulta función llamada desde el interior del $ cliente variable que representa la implementación del cliente XML-RPC declarada e iniciada originalmente. Básicamente estamos enviando una solicitud al servidor. El servidor recibirá una solicitud con los siguientes parámetros:

  • wp.uploadFile - la función de servicio requerida que estamos llamando y usando para cargar el archivo
  • 1 - la ID del blog (cada blog de WordPress tiene una ID, el valor predeterminado es 1
  • $ usr - La variable de nombre de usuario previamente declarada.
  • $ pwd - La variable de contraseña previamente declarada.
  • $ params - El conjunto de parámetros de los que acabamos de hablar..

El codigo completo

Todo el código anterior, en conjunto, se vería así:

 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); ?>

Conclusión

No es difícil implementar un cliente de este tipo, pero como a veces el código que se supone que debe construir es específico, debe saber lo que está haciendo para que pueda lograr el efecto deseado. Un ejemplo de esto es la implementación del cliente XML-RPC en PHP para una solicitud de servidor de archivos de carga XML-RPC de WordPress. Si los datos que está enviando no tienen el formato correcto, es posible que no se acepten. Este ejemplo es solo unas pocas líneas de código pero es muy específico. El mismo cliente puede ser usado para hacer cualquier otro tipo de
Solicitud a WordPress usando diferentes funciones de solicitud XML-RPC con los parámetros apropiados.