in

WP-CLI – Gestión avanzada de WordPress

La interfaz de línea de comandos siempre ha sido popular en el mundo de los desarrolladores porque proporciona herramientas que aumentan la productividad y aceleran el proceso de desarrollo. A primera vista, puede parecer difícil de creer que usar la línea de comandos para realizar ciertas tareas sea más fácil que usar una interfaz gráfica. El propósito de este artículo es aclarar tus dudas al respecto, al menos en lo que respecta a las tareas de WordPress. WordPress proporciona una interfaz gráfica de usuario para cada tarea administrativa, y esto ha ayudado a convertirlo en el sistema de gestión de contenido más popular de la web. Pero en términos de productividad, trabajar con la línea de comandos te permite realizar muchas de estas tareas de manera más eficiente y rápida.

La interfaz de línea de comandos (CLI) siempre ha sido popular en el mundo de los desarrolladores porque proporciona herramientas que aumentan la productividad y aceleran el proceso de desarrollo. A primera vista, puede parecer difícil de creer que usar la línea de comandos para realizar ciertas tareas sea más fácil que usar una interfaz gráfica. El propósito de este artículo es aclarar tus dudas al respecto, al menos en lo que respecta a las tareas de WordPress.

WordPress proporciona una interfaz gráfica de usuario para cada tarea administrativa, y esto ha ayudado a convertirlo en el sistema de gestión de contenido más popular de la web. Pero en términos de productividad, trabajar con la línea de comandos te permite realizar muchas de estas tareas de manera más eficiente y rápida. WP-CLI es un conjunto de herramientas de línea de comandos que brindan dicha funcionalidad para administrar sitios web de WordPress. En este tutorial, describiré los beneficios de usar y extender WP-CLI, y presentaré varios comandos avanzados para facilitarle la vida en lo que a trabajar con WordPress respecta.

Instalación  #

Nota: Los siguientes pasos requieren un entorno similar a UNIX (OS X, Linux o FreeBSD). Si es un usuario de Windows, necesitará una herramienta de línea de comandos como Cygwin o una máquina virtual. La instalación de WP-CLI es simple. La idea básica es descargar un archivo PHP y colocarlo en algún lugar para poder ejecutarlo desde cualquier parte. Puede descargar el script WP-CLI desde el repositorio de GitHub:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Luego, necesitas hacer que el archivo sea ejecutable:

chmod +x wp-cli.phar

El último paso es mover el archivo a una carpeta, para que puedas ejecutarlo desde cualquier lugar. Cambiar el nombre del archivo a algo fácil de recordar es una buena idea; esta es la razón por la que wpes el nombre más utilizado:

sudo mv wp-cli.phar /usr/local/bin/wp

La instalación ha finalizado y deberías poder escribir comandos WP-CLI. Puedes verificar si este proceso se completó correctamente con el siguiente comando:

wp --info

Si todo salió bien, deberías obtener una salida similar a esta:

PHP binary: /usr/bin/php
PHP version: 5.5.24
php.ini used: /etc/php.ini
WP-CLI root dir: phar://wp-cli.phar
WP-CLI global config: /Users/kouratoras/.wp-cli/config.yml
WP-CLI project config: WP-CLI version: 0.19.2

Tareas comunes  #

Este artículo se centra en el uso más avanzado de WP-CLI, pero podemos comenzar con algunas tareas ordinarias que se pueden realizar en la línea de comandos.

Instalar un sitio web de WordPress  #

Es un comando básico de WP-CLI core, que ofrece un conjunto de herramientas poderosas para administrar instalaciones de WordPress. El primer paso para configurar un nuevo sitio web de WordPress es descargar el paquete. Navegue hasta el directorio deseado y escribe:

wp core download

Esto descargará la última versión de WordPress en inglés (en_US). Si desea descargar otra versión o idioma, use los parámetros –versiony –locale. Por ejemplo, para usar la localización española y la versión 4.2.2, debes escribir:

wp core download --version=4.2.2 --locale=es_ES

Una vez que se completa la descarga, puedes crear el archivo wp-config.php usando el comando core config:

wp core config --dbname=databasename --dbuser=databaseuser --dbpass=databasepassword --dbhost=localhost --dbprefix=prfx_

Este comando usará los argumentos y creará un wp-config.phparchivo. Finalmente, para instalar WordPress, usa el comando core install:

wp core install --url=example.com  --title="WordPress Website Title" --admin_user=admin_user --admin_password=admin_password --admin_email="admin@example.com"

Actualizar Core  #

Si tu instalación de WordPress necesita ser actualizada, usa los subcomandos wp core updatey wp core update-dbpara actualizar los archivos centrales y la base de datos (si la base de datos necesita ser actualizada). Las actualizaciones de WordPress, especialmente las correcciones de seguridad, son importantes. Para que sucedan más rápidamente, use el comando core update y (si es necesario) el comando core update-db:

wp core update
wp core update-db

Siempre puedes verificar la versión actual de tu instalación usando core version:

wp core version

Inicialmente, la actualización en la línea de comandos puede no parecer más eficiente que hacerlo desde el panel de control, pero si mantienes varias instalaciones de WordPress, puede ahorrar mucho tiempo y clics. Puede crear un script y actualizarlos todos a la vez:

#!/bin/bash
declare -a sites=('/var/www/wp1' '/var/www/wp2' '/var/www/wp3')
for site in "${sites[@]}";
do
wp --path=$site core update done

En cualquier caso, se recomienda hacer una copia de seguridad de su base de datos antes de cualquier proceso de actualización:

wp db export backup.sql

Administrar complementos  #

De manera similar, administrar complementos es cuestión de un solo comando. Por ejemplo, plugin statusdevuelve información sobre los complementos instalados y su estado, Asignifica activo, Isignifica inactivo y UAsignifica actualización disponible, con un resultado como este:

5 installed plugins:
UA smooth-scroll-up 0.8.9
I wordpress-beta-tester 1.0
A wordpress-importer 0.6.1
A wpcli-commands 1.0

Otros subcomandos relacionados plugin-se install, activate, deactivate, update, deletey search, que se pueden usar como en el ejemplo siguiente:

wp plugin install wordpress-importer --activate
wp plugin deactivate wordpress-importer
wp plugin delete wordpress-importer
wp plugin update --all wp plugin search import

Administrar temas  #

En general, los mismos comandos se pueden usar para manejar el tema de un sitio web simplemente reemplazando plugincon theme, por lo que no tiene sentido profundizar en esto. Un comando digno de mención es scaffold, que crea un tema hijo vacío, lo que hace que ese proceso sea mucho más corto:

wp scaffold child-theme my-child-theme --parent_theme=twentyfifteen --theme_name='My Child Theme' --author='Konstantinos Kouratoras' --author_uri=http://www.kouratoras.gr --theme_uri=http://wp.kouratoras.gr --activate

Manipular datos  #

Además de comandos simples como post create, post edity post delete, WP-CLI proporciona herramientas para administrar publicaciones. Si necesitas muchas publicaciones para probar tu código en un complemento o tema, puede usar el comando post generate:

wp post generate --count=1000

También puedes exportar tu contenido actual y migrarlo a otra instalación de WordPress. Para hacerlo, debes instalar el complemento Importador:

wp plugin install wordpress-importer --activate

Y luego usar los comandos export e importpara completar la transferencia:

wp export
wp import test.xml --authors=create

Administrar revisiones de publicaciones  #

De forma predeterminada, WordPress almacena cada revisión de una publicación en la base de datos. Esto significa que eventualmente tendrás una gran cantidad de información en la tabla de publicaciones de tu sitio web. Para manejar este problema, puede usar el complemento wp-revisions-cli, que es una extensión de WP-CLI que agrega funcionalidad para administrar las revisiones de publicaciones. Esto se puede instalar como un complemento común de WordPress y ofrece un conjunto de comandos como clean, listy status. Por ejemplo, al usar wp wp revisions list, puedes obtener una lista de revisiones de las publicaciones actuales:

+--------------+-------------+-----+
| post_title | post_parent | ID |
+--------------+-------------+-----+
| Hello world! | 1 | 894 |
+--------------+-------------+-----+

Medios  #

Algunas tareas administrativas que son difíciles de realizar se relacionan con las imágenes y los medios en general. WP-CLI proporciona algunas herramientas para ahorrar tiempo aquí.

Imágenes de importación masiva  #

No es inusual que un cliente proporcione un conjunto de imágenes y le pida que las importe a su sitio web. Hacer esto a través del panel del administrador es tedioso. En cambio, utilizando la herramienta multimedia de WP-CLI, puedes completar esta tarea con un solo comando:

wp media import images_folder/*

Regenerar tamaños de imágenes   #

Necesitas regenerar miniaturas cuando crea nuevos tamaños de imagen durante el proceso de desarrollo. Por supuesto, puede usar un complemento de terceros o un código PHP personalizado para lograr esto, pero ambas formas requieren mucho más tiempo que un comando WP-CLI:

wp media regenerate

Hay infinitas posibilidades, porque puede combinar varios comandos para especificar las imágenes de destino para editar. Por ejemplo, para regenerar las imágenes destacadas para publicaciones de una categoría en particular, puede usar el siguiente comando:

wp media regenerate $(wp eval 'foreach(get_posts(array("category" => 2,"fields" => "ids")) as $id) { echo get_post_thumbnail_id($id). " "; }')

Operaciones de base de datos  #

Cuando hablamos de administración avanzada de WordPress usando la línea de comandos, las operaciones de la base de datos siempre nos vienen a la mente. WP-CLI proporciona herramientas para este tipo de tareas. Puedes ejecutar consultas simples:

wp db query "SELECT id FROM wp_users;"

Y puede manejar operaciones de base de datos como importar, exportar y optimizar:

wp db export
wp db import backup.sql
wp db optimize

El comando de exportación también se puede utilizar en una secuencia de comandos o un trabajo cron para manejar y programar copias de seguridad de la base de datos.

Buscar y reemplazar  #

Desarrollar un sitio web en un servidor local o de desarrollo y luego pasar a otro servidor cuando todo esté listo es una práctica común. Copiar los archivos y migrar la base de datos son pasos sencillos. Reemplazar las URL antiguas por las nuevas en los registros de la base de datos es una parte más complicada de este procedimiento, porque las URL también existen en los datos serializados, para los cuales una simple búsqueda y reemplazo no funcionará. WP-CLI te ayuda a realizar esta tarea. El search-replacecomando reemplaza la URL anterior por la nueva en todas las entradas de la base de datos, incluidas aquellas que contienen datos serializados.

wp search-replace 'dev.example.com' 'www.example.com'

En este caso, WP-CLI descomprime los datos JSON, ejecuta la acción de reemplazo y vuelve a empaquetar los datos en la entrada de la base de datos. Si deseas ver cuántas instancias de esta acción de búsqueda hay en tu base de datos sin realizar el comando de reemplazo, puedes ejecutar el comando anterior usando –dry-run:

wp search-replace --dry-run 'dev.example.com' 'www.example.com'

La salida resultante será similar a la siguiente:

+---------------------+-----------------------+--------------+------+
| Table | Column | Replacements | Type |
+---------------------+-----------------------+--------------+------+
| wpcli_options | option_value | 2 | PHP |
| wpcli_posts | post_content | 1 | SQL |
| wpcli_posts | guid | 28 | SQL |
+---------------------+-----------------------+--------------+------+

Trabajando con WordPress Multisite  #

Una gran ventaja de WP-CLI y de la línea de comandos en general es la capacidad de automatizar tareas repetitivas usando scripts. Esto también se aplica a las redes multisitio de WordPress. En lugar de visitar el panel de control de cada sitio web para realizar una tarea, puedes simplificar el proceso utilizando algunas líneas de código. Por ejemplo, puedes utilizar el siguiente script para instalar el complemento Importador de WordPress:

#!/bin/bash
for site in $(wp site list --field=url)
do
wp plugin install wordpress-importer --url=$site --activate
done

Si deseas evitar los pasos adicionales de crear y ejecutar un archivo de secuencia de comandos, puedes ejecutar el ejemplo anterior con un solo comando:

for site in $(wp site list --field=url); do wp plugin install wordpress-importer --url=$site --activate; done

Uso de WP-CLI de forma remota con SSH  #

Si ya has instalado WP-CLI en tu servidor remoto o si tu proveedor de alojamiento lo admite, puedes conectarte a través de un terminal SSH y usar los comandos WP-CLI. Lo único que necesitarás es un cliente SSH y tus credenciales de host para conectarte a tu servidor. Los usuarios de Linux y Mac OS X no necesitan ningún software adicional, porque esto se puede hacer usando la aplicación Terminal. Para los usuarios de Windows, existen herramientas de terceros, siendo Putty la más popular. Usando cualquiera de las herramientas mencionadas anteriormente, puedes conectarte a tu servidor usando este comando:

ssh username@host

Se te pedirá tu contraseña y, si se conecta correctamente, tendrás una interfaz de línea de comandos para usar las herramientas WP-CLI para tus sitios web con este host. En caso de que WP-CLI no esté disponible, puede seguir los pasos descritos en el sitio web oficial para instalarlo. Al final del proceso, puedes verificar que se instaló correctamente escribiendo el siguiente comando:

wp cli version

Si todo salió bien, obtendrás la versión actual.

Ejecutar comandos sin problemas  #

Conectarse a un servidor y navegar por la ruta correcta para ejecutar comandos WP-CLI es un poco aburrido. En su lugar, puedes usar WP-CLI SSH, que es un paquete que te permite invocar WP-CLI desde su shell local, sin tener que iniciar sesión en su host remoto. Antes de pasar a los pasos de instalación de WP-CLI SSH, debes configurar el índice de paquetes de WP-CLI en la carpeta ~/.wp-cli. (Si no existe, crea este directorio).

cd ~/.wp-cli

Tendrás que instalar Composer, si no lo ha hecho antes:

curl -sS 'https://getcomposer.org/installer' | php

Crea (o use el archivo existente) composer.json:

php composer.phar init --stability dev --no-interaction
php composer.phar config bin-dir bin
php composer.phar config vendor-dir vendor

Agrega el índice del paquete WP-CLI:

php composer.phar config repositories.wp-cli composer 'http://wp-cli.org/package-index/'

Crea (o usa el archivo existente) config.yml y coloca estas líneas dentro de él:

require:
- vendor/autoload.php

Ahora todo debería estar listo para que instales el paquete WP-CLI SSH:

php composer.phar global require x-team/wp-cli-ssh dev-master

Es hora de crear el archivo de configuración y configurar los hosts. Crea un archivo wp-cli.yml e inserta la siguiente configuración:

ssh:
production:
# The %pseudotty% placeholder gets replaced with -t or -T depending on whether you're piping output # The %cmd% placeholder is replaced with the originally invoked WP-CLI command
cmd: ssh %pseudotty% production.example.com %cmd%
# Passed to WP-CLI on the remote server via --url
url: production.example.com
# We cd to this path on the remote server before running WP-CLI
path: /var/www/production
# WP-CLI over SSH will stop if one of these is provided
disabled_commands:
- db drop
- db reset

En el ejemplo anterior, reemplaza production.example.comcon la URL de tu servidor y /var/www/productioncon la ruta a su instalación de WordPress. En la sección disabled commands, puedes configurar los comandos WP-CLI que no se permitirán en el servidor remoto. Puede crear tantos hosts como desees, utilizando diferentes nombres para cada uno. Si todo se ha configurado correctamente, podrá ejecutar comandos utilizando el subcomando ssh y proporcionando el argumento de host:

wp ssh plugin status --host=production

En caso de que estés trabajando principalmente en el servidor remoto, también existe la opción de crear un alias en tu archivo ~/.bash_profile, para que el wpcomando use este host por defecto:

alias wp="wp ssh --host=production"

Pruebas unitarias  #

Las pruebas unitarias pueden ser muy beneficiosas para los desarrolladores de complementos. Pueden revelar errores muy rápidamente y garantizar que una nueva versión de su software no rompa nada. Sin embargo, crear pruebas es un proceso complicado porque debe configurar PHPUnit, configurar la biblioteca de pruebas de WordPress y los archivos de configuración de prueba. Para las dos últimas tareas, WP-CLI puede hacer su vida más fácil y generar los archivos requeridos automáticamente. Lo primero es lo primero. Necesitas instalar PHPUnit; sigue la guía en el sitio web oficial. Después de esto, WP-CLI tomará medidas y te ayudará a crear los archivos necesarios para ejecutar las pruebas de PHPUnit con un solo comando:

wp scaffold plugin-tests my-plugin

Si navegas al directorio de tu complemento, verás algunas carpetas y archivos nuevos:

.travis.yml
bin/
phpunit.xml
tests/

Puedes usar el archivo install-wp-tests.shen la carpeta bin para inicializar el entorno de prueba:

bash bin/install-wp-tests.sh test_database user 'pass' localhost latest

Los parámetros utilizados son:

  • test_database la base de datos que se utilizará para insertar datos de prueba
  • user Usuario de la base de datos MySQL
  • pass Contraseña de la base de datos MySQL
  • localhost Host MySQL
  • latest la versión de WordPress que estás usando

El comando anterior configuraría una prueba unitaria de ejemplo que en realidad no hace nada, pero se puede usar como un archivo de inicio para crear tu propia prueba. El archivo es tests/test-sample.phpy contiene el siguiente código fuente:

class SampleTest extends WP_UnitTestCase {      function test_sample() {         // replace this with some actual testing code         $this->assertTrue( true );     } }

Ahora todo está listo y puedes ejecutar la prueba unitaria de tu complemento:

phpunit

No profundizaremos en las pruebas unitarias porque están más allá del alcance de este artículo, pero puedes encontrar un montón de recursos en el sitio web oficial de PHPUnit y en la web.

Ampliación de WP-CLI  #

Si has llegado a este punto, es posible que estés convencido de que WP-CLI es una herramienta poderosa en manos de un desarrollador. Pero este no es el final de la historia, porque también puedes extender la funcionalidad incorporada usando tu propio código. Hay dos maneras de hacerlo. Puedes cargar y ejecutar código PHP desde un archivo o crear tu propio complemento que cree un comando personalizado.

Ejecutar archivo PHP  #

Si deseas probar un fragmento de código PHP, no es necesario incluirlo en un archivo de WordPress. WP-CLI proporciona el comando eval-file, que ejecuta archivos PHP comunes, habiendo cargado WordPress antes. Por ejemplo, si deseas imprimir el título de una publicación aleatoria de WordPress, el código fuente para esta acción sería algo como esto:

global $wpdb;
$random_post = $wpdb->get_var(
"SELECT post_title
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY rand()
LIMIT 1"
);
echo "Random post: $random_post";

Guárdalo en un archivo con nombre script.phpy verifica el resultado, escribiendo este comando:

wp eval-file ./script.php

Crear comandos personalizados usando el complemento  #

Avanzando un paso más, puedes crear complementos personalizados de WordPress para ampliar la funcionalidad incorporada de WP-CLI y crear tus propios comandos. Tu archivo de complemento debe tener una clase para cada comando y métodos públicos para cada subcomando. Veámoslo en acción. Supongamos que deseas crear un comando que contenga tres subcomandos:

  • hello toma un nombre como argumento posicional y dice hello
  • bye toma un nombre como argumento asociativo y dice bye
  • random imprime el título de una publicación aleatoria de WordPress

Nos gustaría crear una clase, llamada My_Commands, que contiene tres funciones públicas: hello, byey random. Estas funciones toman dos argumentos:, $argsque contiene los argumentos posicionales, y $assoc_args, que contiene los argumentos asociativos. En nuestro ejemplo, el primer subcomando tendría un nameargumento posicional, que tomaría como entrada para imprimir hello:

function hello( $args, $assoc_args ) {
list( $name ) = $args;
WP_CLI::success( "Hello, $name!" );
}

El segundo subcomando tendría un nameargumento asociativo, que se extraería de la $assoc_argsmatriz:

function bye( $args, $assoc_args ) {
$name = 'name';
if( $assoc_args[ 'name' ] ) {
$name = $assoc_args[ 'name' ];
}
WP_CLI::success( "Bye, $name!" );
}

El tercer subcomando no admitiría argumentos. Simplemente ejecutaría una consulta de base de datos, buscaría una publicación aleatoria e imprimiría el título:

function random ( $args, $assoc_args ) {
global $wpdb;
$random_post = $wpdb->get_var(
"SELECT post_title
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY rand() LIMIT 1"
);
WP_CLI::success( "Random post: $random_post" );
}

Finalmente, tendrías que registrar tu clase como un comando WP-CLI, usando una llamadaadd_command. Esta función toma como argumentos el nombre del comando y el nombre de la clase:

WP_CLI::add_command( 'mycommands', 'My_Commands' );

Al envolver todo el código en un complemento de WordPress, terminarías con el siguiente archivo:

/* Plugin Name: WP-CLI Commands Version: 1.0 description: >-   Extending WP-CLI with custom commands Author: Konstantinos Kouratoras Author URI: http://www.kouratoras.gr */ 
if
( defined( 'WP_CLI' ) && WP_CLI ) { class My_Commands { function hello( $args, $assoc_args ) { list( $name ) = $args; WP_CLI::success( "Hello, $name!" ); } function bye( $args, $assoc_args ) { $name = 'name'; if( $assoc_args[ 'name' ] ) { $name = $assoc_args[ 'name' ]; } WP_CLI::success( "Bye, $name!" ); } function random ( $args, $assoc_args ) { global $wpdb; $random_post = $wpdb->get_var("SELECT post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY rand() LIMIT 1"); WP_CLI::success( "Random post: $random_post" ); } } WP_CLI::add_command( 'mycommands', 'My_Commands' ); }

Puedes confirmar que tu comando se ha registrado correctamente escribiendo lo siguiente:

wp mycommands

Esto genera la lista de todos los comandos disponibles:

usage: wp mycommands bye --name=name
or: wp mycommands hello name
or: wp mycommands random

Todo está listo para ejecutar tus primeros comandos personalizados de WP-CLI:

wp mycommands hello world wp mycommands bye --name="Joe" wp mycommands random

Respectivamente, la salida sería:

Success: Hello, world!
Success: Bye, Joe!
Success: Random post: This is a title of a post

Conclusión  #

Ahora tienes una buena idea de las posibilidades de WP-CLI. Estas posibilidades son infinitas, si consideras que puedes ampliar la funcionalidad principal y crear tus propios comandos. Por supuesto, en este artículo no se mencionaron muchas más herramientas integradas. Puedes encontrar más información sobre ellos en el sitio web oficial. En caso de que desees ver WP-CLI en acción e integrarlo en su flujo de trabajo diario, encontrarás algunos recursos a continuación para comenzar.

Recursos de la Web  #

¿Qué opinas?

Escrito por Wombat

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Generando Muchas Páginas de Manera Automática en WordPress con Plugins Parte 1: El Spin del Texto

Generando Muchas Páginas de Manera Automática en WordPress con Plugins Parte 2: WordPress y Plugins

Cómo crear y personalizar un tema hijo de WordPress