Por gran parte de su vida, WordPress ha sido construido usando un simple código básico con un toque de PHP orientado a objetos siendo el sistema más abstracto. Sin embargo, en los últimos años esto está cambiando para mejor. Desde pruebas unitarias al preproceso de CSS y herramientas de línea de comandos, más y más activos aparecían al alcance de los desarrolladores. En este artículo nos centraremos en uno de mis favoritos: WP-CLI.

WP-CLI ha sido un proyecto open source por más de una década, siendo mantenido principalmente por Daniel Bachhuber desde el 2003. La meta principal de WP-CLI es ayudar a acelerar los flujos de trabajo del desarrollador en WordPress.

A través de los años, ¡el proyecto conseguido a convertirse en algo más! Ahora se está convirtiendo en un requisito para otros proyectos open source, como Trellis y Bedrock. Desde enero de 2017, WP-CLI se ha trasladado oficialmente a WordPress.org y ahora es co-mantenido por Alain Schlesser.

WP-CLI v2 fue lanzada en Agosto 8 de 2018, así que exploraremos algunos de los cambios y nuevas características. Si usted es cliente de Kinsta, WP-CLI 2.0.1 está instalado por defecto en todos nuestros servidores, simplemente entre vía SSH en su servidor para comenzar. Acceso SSH está disponible en todos nuestros planes (¿No puedes conectarte a través de SSH? Arreglar el error de «Connection Refused» de SSH).

Conociendo WP-CLI

El requerimiento mínimo de PHP en WP-CLI v2.0.0 ha sido subido a PHP 5.4. Mientras que es bueno ir hacia adelante, nosotros recomendamos que por lo menos corra una versión soportada de PHP, queriendo decir 5.6 o mayor. PHP 7.2 es el valor por defecto en todas las instalaciones de Kinsta, tanto por razones de seguridad como de rendimiento. También tenemos PHP 7.3 y 7.4 disponibles.

Para empezar, usted necesitará instalar WP-CLI – un proceso muy sencillo. Los pasos para Linux y OSX son los siguientes, ponga estos tres comandos, uno después del otro:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Si algo no funciona o está usando Windows, puede consultar las instrucciones básicas o los métodos de instalación alternativos.
Una vez hecho esto, usted debería ser capaz de emitir el comando wp --info y obtener una respuesta significativa.

El proceso es el mismo si se desea instalar WP-CLI en su servidor. Kinsta tiene WP-CLI instalado por defecto. ¿No está seguro de la versión que se encuentra utilizando? Siempre podrá ingresar el comando wp cli version para descubrirlo.

Los Fundamentos de WP-CLI

El tener acceso a WordPress desde la línea de comando es bastante poderosa por su misma, pero puede darle aún más control y velocidad al usar los bash scripts.

Los Bash Scripts le permiten ejecutar un script con un solo comando. Podría escribir bash install-and-setup.sh y obtiene el siguiente resultado:

  • Descargar WordPress
  • Crear y rellenar wp-config.php
  • Crear la base de datos
  • Instalar WordPress
  • Instalar y activar los plugins que necesita
  • Instalar y activar un tema
  • Descargar y añadir el contenido de la prueba

Estos serían los pasos que yo haría para crear un nuevo entorno de pruebas para un proyecto. Normalmente me llevaría al menos 5-10 minutos, especialmente si hay algún plugin involucrado. La emisión de un solo comando es obviamente mucho más rápida.

Comandos en General

Si está acostumbrado a trabajar en la terminal no hay nada especial acerca de WP-CLI para usted. Los comandos siempre comienzan con wp seguido por un Comando y Subcomando, seguido por parámetros obligatorios y opcionales, algo como esto:

wp command subcommand requiredparam --optionalparam --optionalparam2=value

Vamos a instalar un tema para ver cómo funciona esto con un comando verdadero:

wp theme install sorbet --activate

Esto instalará y activará el tema Twenty-Seventeen en su instalación de WordPress.

Note que WP-CLI funcionará con la instalación de WordPress que está actualmente en la terminal. Si usted cambia directorios para ir a otra instalación de WordPress, funcionará con aquella.

Ejemplos útiles

¡Ese fue WP-CLI en resumen! Aunque hay algunas cosas avanzadas que usted puede hacer, de lo que hablaremos en un momento, ya sabe lo suficiente para empezar y hacer lo que sea necesario. Recomiendo echar un vistazo a la lista de comandos, pruebe algunos de ellos. Echaremos un vistazo a algunas cosas útiles aquí y después, pasaremos a utilizar WP-CLI a través de SSH y usar bash scripts.

Instalación de WordPress

Yo utilizo WP-CLI constantemente, para establecer entornos de prueba, el primer paso el cual es una sencilla instalación. Aquí tenemos una lista de comandos que utilizo:

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

¡Observe lo genial que es esto! La más reciente versión de WordPress es descargada mediante el primer comando. El segundo comando configura el config con el acceso a la base de datos y algo de PHP adicional al final. Los constantes adicionales se aseguran de que tengamos nuestras opciones de depuración para las pruebas.

El tercer comando crea la base de datos (WP-CLI utiliza la información de acceso a la base de datos desde el archivo de configuración) y finalmente, nosotros nos encargamos de instalar WordPress usando un par de parámetros.

Reinstalando WordPress Core

También puede reinstalar WordPress core utilizando WP-CLI. El siguiente comando bajaría WordPress sin temas, ni plugins por defecto.

wp core download --skip-content --force

Cambiando la URL de WordPress

Hay muchas razones porque uno necesitaría o desearía cambiar la URL de WordPress. Quizás usted se está cambiando de dominio, o mudándose a un subdominio, actualizando del www a uno sin www, moviendo archivos de un lado a otro, o incluso migrando de HTTP a HTTPS. Cualquiera que sea el caso, puede usted fácilmente utilizar el comando wp option update update para esto. Aquí tenemos un ejemplo:

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

Lista Detallada de Plugins Actuales

Para obtener una lista de plugins actuales instalados en un sitio, simplemente utilice el siguiente comando. En este ejemplo, usted podrá ver que tenemos los plugins de Schema y Yoast SEO instalados. También regresará el estado (activo/inactivo), si hay una actualización disponible, y la versión actual.

wp plugin list
Lista de plugins en WP-CLI
Lista de plugins en WP-CLI

Instalando Varios Plugins

Para instalar varios plugins simplemente puede apilar parámetros. He aquí un ejemplo que descarga y activa 3 plugins:

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

Tenga en cuenta que los nombres del plugin provienen de su nombre en el repositorio. La manera más fácil de resolver esto es visitar su página y mirar buscar la dirección URL o utilizar wp plugin search searchterm  que le dará una lista en la terminal.

URL del plugin en el repositorio
URL del plugin en el repositorio

También puede instalar las versiones antiguas de los plugins para WordPress si es necesario, utilizando el atributo --version.

wp plugin install wordpress-seo --version=4.8 --activate

Incluso mejor, usted puede instalar plugins desde archivos remotos, no sólo el repositorio, lo que resulta muy práctico si está desarrollando un plugin, o usando un plugin premium. El siguiente comando instala dos plugins desde el repositorio y uno de un servidor de Amazon S3.

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

Desactivando Múltiples Plugins

Para desactivar un solo plugin usted tiene que usar el siguiente comando.

wp plugin deactivate wordpress-seo

Para desactivar todos sus plugins al mismo tiempo, utilice el siguiente comando.

wp plugin deactivate --all
WP-CLI - desactivar todos los plugins
WP-CLI – desactivar todos los plugins

Este comando anterior puede ser muy útil cuando intente arreglar problemas de compatibilidad y simplemente necesita desactivar todos los plugins al mismo tiempo. Luego puede regresar y activarlas todos a la vez mientras sigue su curso.

Actualizando Plugins

También puede actualizar los plugins de WordPress de forma manual. Aquí tenemos unos ejemplos:

wp plugin update wordpress-seo
Actualizar wordpress plugin manualmente
Actualizar wordpress plugin manualmente

Buscar y Reemplazar en la Base de Datos

Una de las principales razones por las que es difícil migrar un sitio simplemente copiando y pegando una base de datos es que la base de datos contiene matrices serializadas. Si necesita reemplazar todas las instancias de http://testsite.com con http://livewebsite.com sus matrices serializadas no tendrán sentido porque el recuento de strings no coincidirá.

El comando search-replacedeja de serializar matrices primero y después, realiza la búsqueda y reemplazo, después re-serializa las matrices. Usted puede hacer esto con un simple comando:

wp search-replace oldstring newstring

Parámetros adicionales le permiten hacer mucho más, incluyendo una vista previa de lo que será reemplazado al usar--dry-run.

Importación y Exportación

Existen dos formas de exportar contenido con WP-CLI. Puede crear un archivo XML, al igual que esa herramienta de exportación de WordPress, o puede exportar/importar la base de datos cruda. Me parece que la última es mucho más útil en mi rutina diaria, resulta muy práctica al sincronizar sitios.

wp db export es todo lo que necesita para crear un archivo SQL y wp db import file.sql es todo lo que necesita para importarlo. Funciona de maravilla, sólo tenga cuidado de no sobrescribir cualquier cosa que necesite, la importación básicamente volcara la base de datos existente y usará el archivo SQL proporcionado en su lugar.

Add, Update, Delete Users

You can add, update, and delete users with WP-CLI.

# List user IDs
$ wp user list --field=ID
1
# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8
# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.
# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com

Administrar Roles y Capacidades

WP-CLI puede administrar roles para usted muy fácilmente utilizando el comando wp role. Esto es bastante útil si desea probar cómo funciona su plugin con funciones personalizadas, pero usted no crea realmente los roles dentro de su plugin.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

Los comandos anteriores crearán un nuevo rol (organizador), añadirá todas las capacidades del rol de editor a él y después, agregará una nueva capacidad: administrar eventos. Con los comandos adecuados puedes usar WP-CLI para cambiar tu contraseña de WordPress.

Generar Datos de Prueba

Me encantan todo tipo de funciones farsantes – los que agregan contenido ficticio a su sitio que puede utilizar para las pruebas. WP-CLI tiene un par de estos ya integrados, aquí hay algunas funciones que generarán usuarios, términos y posts.

wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50

Administrando Eventos WP-Cron

Usted puede administrar eventos WP-Cron y/o un WordPress Cron job en WP-CLI. Por ejemplo, el siguiente comando le dará su lista de eventos cron actual.

wp cron event list
Lista de eventos wp-cron
Lista de eventos wp-cron

Borrando Transitorios

Incluso puede borrar y limpiar uno o todos los transitorios utilizando el siguiente comando.

wp transient delete --all

Si está ejecutando multisitio, necesitará un comando un poco más complicado. Por defecto, el comando solo verifica la tabla wp_options. No comprueba wp_1_options, wp_2_options, etc.

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

Limpiando la tabla de wp_options

La tabla de wp_options puede ser un culpable común para los tiempos tan lentos de las consultas en su sitio, debido a una auto carga de dato que es dejada atrás por plugins y temas externos. Cheque este gran articulo de WP Bullet sobre cómo utilizar WP-CLI para limpiar su tabla de wp_options.

Borre Revisiones de WordPress

En sitios grandes, las revisiones de WordPeess pueden irse agregando rápidamente a miles de filas en su base de datos las cuales no son necesarias. Usted puede borrar estas revisiones de publicaciones con WP-CLI. Aquí hay un ejemplo del comando:

$ wp post delete $(wp post list --post_type='revision' --format=ids)
Borrando revisiones de WordPress
WP-CLI-borrando revisiones de WordPress

Modo de mantenimiento de control

A partir de WP-CLI v2.2.0, ahora puede controlar el modo de mantenimiento en su sitio de WordPress. Por ejemplo:

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Indexando Datos con Elasticsearch

Elsticsearch es un motor de búsqueda de texto open source. Es usado para indexar datos y buscar estos mismos datos de una forma muy rápida. Ofrecemos eso como un addon para los clientes de Kinsta. Usted puede utilizar comandos ElasticPress WP-CLI para llevar a cabo una indexación sobre SSH. Por ejemplo:
wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

Trabajando con Sitios Multilingües

WP-CLI v2.0.0 incluye una nueva familia de comandos wp i18n para aquellos que trabajan con sitios multilingües. Por ejemplo, usted puede crear un archivo POT para un plugin o tema de WordPress.

wp i18n make-pot <source> [<destination>] [--slug=<slug>] [--domain=<domain>] [--ignore-domain] [--merge[=<file>]] [--exclude=<paths>] [--skip-js]

Conozca la documentación de comandos de i18n.

Utilizando WP-CLI con WooCommerce

¿Trabajo con sitios de eCommerce? Nosotros recomendamos checar la sorprendente guía de desarrollo de WP-CLI WooCommerce de Robot Ninja para ver comandos rápidos y sencillos que usted puede usar. Generar una lista de clientes, órdenes e incluso crear productos en masa, todo esto es posible con WP-CLI.

Usando WP-CLI de Forma Remota

Una de las mejores cosas que puede hacer con WP-CLI es administrar sus instalaciones remotas de WordPress. Tendrá que hacer un poco más de configuración, pero una vez hecho es el sueño hecho realidad de un administrador de sitios web.

Para usar sin problemas los comandos WP-CLI en un servidor remoto a través de SSH, antes se necesitaba el addon de comando wp-cli-ssh. ¡Pero desde la v0.24.0, esto ya es parte de WP-CLI!

Importante: Usted necesita tener instalado WP-CLI en ambas computadoras cuando utilice el comando desde su servidor.

Configuración de Servidores Remotos

Puede configurar sus servidores global o localmente. Para configurarlos globalmente use el archivo previamente mencionado config.yml.También puede usar el archivo wp-cli.ymlwp-cli.local.yml en su directorio funcional actual.

La configuración de servidores funciona algo como esto, pegue esto en uno de los archivos mencionados:

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://myseite.com
    path: /www/path/to/site/root

Una vez que todo esto se lleve a cabo puede escribir el siguiente comando para actualizar WordPress en su sitio remoto:

wp ssh core update --host=staging

Si usted posee o administra un montón de sitios, ¡creo que puede ver que esto es increíble! El script solicitará una contraseña, pero si utiliza claves RSA para conectarse puede renunciar a ello. Eche un vistazo a este artículo para poner esto en marcha.

Usando Bash Scripts

Los Bash Scripts le ahorran incluso más tiempo automatizando tareas. ¿Recuerda cómo teníamos que escribir un montón de comandos para instalar WordPress? Puede hacerlo con un solo bash script. Dentro de un directorio cree un archivo install.sh. Pegue el mismo código que teníamos antes dentro y guárdelo.

wp core download

wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Todo lo que necesita hacer ahora es introducir bash install.sh y todo será hecho por usted, sin intervención del usuario. Si usted administra un montón de sitios puede configurar todos sus entornos y crear un bash script como este:

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

Cuando una nueva versión de WordPress salga, ¡esto podría ahorrarle un montón de tiempo! Ya que puede hacer lo que quiera con WP-CLI puede incluso actualizar los temas y plugins de forma regular en una serie de sitios de cliente a la vez.

Conclusión

WP-CLI es realmente el sueño hecho realidad de un desarrollador o administrador de sitio web. Como desarrolladores, podemos crear sitios de prueba en un instante, agregar contenido de prueba y hacer todo tipo de magia de importación/exportación. Los administradores de los sitios pueden manejar actualizaciones del sitio y de otras tareas para múltiples sitios con comandos simples ¡Asegúrese de checar las notas de lanzamiento de WP-CLI v2!

Si aún no ha probado WP-CLI le insto a darle una probada. Hay también un montón de comandos de comunidad como WP-CLI-SSH que añaden aún más características geniales! Si está teniendo problemas, asegúrese de checar la documentación de problemas comunes de WP-CLI.

No olvide que la nueva arquitectura basada en Google Cloud de Kinsta admite WP-CLI de inmediato. Si quiere probar la arquitectura más moderna de WordPress hosting y tener acceso a herramientas como WP-CLI, pruebe nuestro WordPress hosting gestionado.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.