Guía de WP-CLI: Administra WordPress desde tu terminal

Fecha: 05/03/2021
Al trabajar con WordPress, la forma más habitual de interactuar con la aplicación para crear nuevos usuarios, posts, cambiar el diseño de la página o realizar actualizaciones es el wp-admin. ¿Alguna vez te has preguntado si existen otras formas de poder trabajar con tu sitio web?

WordPress pone a tu disposición varias interfaces para que puedas interactuar con la aplicación además del ya mencionado y archiconocido wp-admin. Algunas de ellas pueden ser de gran utilidad si necesitas automatizar tareas en tu sitio web o quieres mejorar la eficiencia en tu trabajo diario.

Las interfaces de comunicación con WordPress son, como decíamos, la zona de administración web o wp-admin, el archivo xmlrpc.php (usado frecuentemente para atacar nuestras aplicaciones), la API rest de WordPress y por último, la línea de comandos a través de wp-cli.

En este artículo nos centraremos en esta última forma de trabajar con tu CMS preferido y en cómo puedes sacarle todo el potencial a tu aplicación web a través de esta herramienta.

Índice del artículo
  • Qué es WP-CLI
  • Ventajas de WP-CLI
  • Cómo instalar WP-CLI
  • Comandos de WP-CLI
  • Añadiendo comandos a WP-CLI
  • Cómo se usa WP-CLI
  • Instalar subcomandos de WP-CLI
  • Conclusión

Qué es WP-CLI


WP-CLI es la herramienta oficial para interactuar y gestionar sitios web basados en WordPress a través de línea de comandos. Pretende ser un sustituto de wp-admin, permitiendo realizar cualquier gestión que normalmente harías desde el interfaz gráfico, en línea de comandos.

En realidad es incluso más potente, ya que pone a tu disposición alternativas para las que, a través del interfaz gráfico, necesitarías instalar un plugin. Por ejemplo, permite la revisión de tareas cron de WordPress, por lo que puede ayudarte a mantener tu sitio libre de código no imprescindible y hacer que funcione de la forma más rápida y eficiente.

Así, wp-cli te permitirá desde instalar un WordPress hasta realizar todas las gestiones que puedas imaginar, tales como la instalación o borrado de temas y plugins, gestión de usuarios y sus roles y permisos, edición de posts, etc.

Ventajas de WP-CLI


Al trabajar con herramientas por terminal, si no tienes experiencia en su uso puede parecerte que son rudimentarias y arcaicas, pero créeme que si los desarrolladores se esfuerzan en crearlas es por su eficiencia y versatilidad.

Por ejemplo, si te dedicas a desarrollar sitios web en WordPress es bastante probable que, de inicio, tengas una colección de plugins preferidos que instalas en casi todos los sitios. Esto puedes hacerlo de forma automática con wp-cli, mientras te preparas un café y piensas en cómo va a ser la interfaz del sitio web, en vez de estar instalando manualmente todos los plugins, uno a uno, con el tiempo que esto consume.

Lo mismo sucede si quieres realizar la actualización de WordPress, con todos sus plugins y el tema en uso. Aunque no es recomendable realizar este tipo de gestiones de forma desatendida, ya que es imprescindible comprobar que todo funciona bien una vez ha finalizado, sí tiene grandes ventajas el uso de wp-cli sobre el interfaz gráfico. Así no dependes de timeouts que puedan producirse debido al servidor web (aun así, sigues dependiendo de los timeouts de PHP, lenguaje de programación con que está escrito WordPress). No digamos ya si tu sitio o un plugin no actualiza correctamente, ya que las opciones sin wp-cli se reducen a restaurar backup y volver a intentarlo, renombrar la carpeta del plugin o pasar a una actualización manual.

Otra de las características que pone a tu disposición es exportar posts y contenidos de tu sitio web o incluso la base de datos entera. ¿Cuántas veces has intentado exportar todos los contenidos y, después de varios minutos de espera mirando la interfaz, has visto que se produce un error? Esto es debido a que, a través de un navegador, dependes de más softwares que tu WordPress; sin embargo, con wp-cli minimizas las herramientas en uso, lo que reduce el riesgo de problemas.

Cómo instalar WP-CLI


Lo primero que necesitas para comenzar a usar esta herramientas es, evidentemente, instalarla.

Los dos requisitos para poder instalar wp-cli son PHP, entre las versiones 5.4 y 7.4 y acceso por terminal o SSH. En los Hosting Elastico de Raiola Networks y en los Servidores VPS Optimizados cuentas con wp-cli instalado por defecto, por lo que puedes saltarte este paso y continuar en el siguiente.

Si todavía no tienes un producto en Raiola Networks o no es alguno de los mencionados, lo primero que debes hacer es revisar si wp-cli ya está instalado. Para ello busca en el path wp-cli (el path es la ruta donde están los programas ejecutables con terminal). Puedes revisar si wp-cli está instalado en tu path con el siguiente comando:
which wp-cli || which wp-cli.phar || which wp
/usr/bin/which: no wp-cli in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/bin/which: no wp-cli.phar in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/bin/which: no wp in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)

instalar wpcli
root@raiolanetworks.servidordepruebas.com:~ $ which wp-cli || which wp-cli.phar || which wp
/usr/bin/which: no wp-cli in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/bin/which: no wp-cli.phar in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/bin/which: no wp in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)

La salida de este comando te mostrará si existe wp-cli en tu path y cuál es su nombre para poder usarlo. En este ejemplo, como puedes ver, no existe (las 3 líneas dicen que no está en mi path), por lo que voy a instalarlo.

Los pasos a seguir para instalar e incluir wp-cli en tu path son:

  1. Accede por ssh a tu servidor o hosting compartido.

  2. -Descárgate el binario de wp-cli con el siguiente comando:
    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar


  3. Comprueba que funciona. Para ello, ejecuta:
    php wp-cli.phar --info


  4. Asígnale permisos de ejecución y muévelo a un directorio dentro de tu path:
     chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp



instalar wpcli 2

Ahora, comprueba de nuevo si wp-cli está ya en tu path y verás que se te devuelve algo como lo siguiente:
which wp-cli || which wp-cli.phar || which wp
/usr/bin/which: no wp-cli in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/bin/which: no wp-cli.phar in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/vesta/bin)
/usr/local/bin/wp

03-instalar wpcli

Por último, solamente queda comprobar que la instalación ha funcionado. Lo puedes hacer como yo en esta captura:
wp --info
OS: Linux 3.10.0 #1 SMP Tue Jun 9 12:58:54 MSK 2020 x86_64
Shell: /bin/bash
PHP binary: /usr/bin/php
PHP version: 7.2.34
php.ini used: /etc/php.ini
WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /root
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.4.0

04-instalar wpcli

Comandos de WP-CLI


Ahora vamos a ver los principales subcomandos y para qué sirven. En la última parte de este artículo haremos ejemplos prácticos con algunos de ellos.

Primero vamos a explicar los subcomandos básicos para poder usar una aplicación WordPress, como es la gestión del propio WordPress y sus plugins, temas y usuarios:































Core Permite descargar, instalar, actualizar y gestionar una instalación WordPress. Con este subcomando podremos verificar que nuestro WordPress (al menos el core, no los plugins y temas) no tiene código malicioso o no esperado, comprobar actualizaciones, convertir nuestro WordPress a multisitio u obtener la versión de nuestro WordPress, entre otras opciones.
Config Genera o lee el archivo de configuración principal de WordPress, wp-config.php
Theme Con este subcomando podemos instalar y desinstalar temas, cambiar el tema activo y actualizar los instalados.
Plugin Es la versión del anterior para gestionar plugins, listar todos los instalados, instalarlos, activarlos o desactivarlos, buscar en los repositorios de WordPress o comprobar su integridad contra dichos repositorios.
Maintenance-mode Gestión integrada de WordPress para modo mantenimiento.
DB Gestiones con la base de datos de Wordpress, como la exportación para hacer copia de seguridad, la actualización, ejecución de consultas u optimizado de la misma.
Caché Sirve para controlar la caché de objetos de WordPress.

Ahora, vamos a revisar los subcomandos de wp-cli para la gestión de usuarios:















User Gestiona los usuarios, sus roles y permisos, así como la información asociada a los mismos.
Cap Gestión de permisos de un rol de usuario.
Role Creación y gestión de roles de usuario. También permite resetear sus propiedades al estado por defecto.

El siguiente subgrupo que vamos a tratar te permite la gestión de los contenidos de tu WordPress desde wp-cli:



























Menu Con esta opción podrás listar, crear o borrar los menús de navegación del tema activo.
Sidebar Este subcomando te permite listar los sidebars de WordPresss. Un sidebar es cualquier elemento donde podemos añadir widgets. Vienen definidos en el código del tema.
Widget Podrás añadir, eliminar y gestionar widgets en las barras laterales de tu CMS.
Media Mediante esta opción podrás importar archivos como adjuntos de forma masiva, regenerar miniaturas y obtener información de las imágenes de tu aplicación.
Post Permite gestionar la creación, edición y borrado de posts.
Comment Opción usada para la moderación de comentarios, así como hacer un recuento del número de comentarios en un post, toda la aplicación, marcarlos como spam, etc.

Añadiendo comandos a WP-CLI


Si todas las opciones que te ofrece wp-cli por defecto no te parecen suficientes, algunos plugins incluyen sus propias herramientas integradas en terminal. Por ejemplo, WooCommerce, Jetpack o AutoOptimize añaden sus propios subcomandos, lo que te permitirá gestionar dichos plugins desde la terminal.

Y, por si esto fuera poco, se pueden escribir plugins o añadidos para wp-cli que puedes instalar y gestionar desde el subcomando package, lo que te permitirá añadir funcionalidades como comprobaciones del estado de salud de tu sitio.

En resumen, y como habrás visto en caso de haber ejecutado la ayuda de wp-cli que te comentaba anteriormente, las opciones son muy amplias, más incluso de las que he comentado hasta el momento. Existen, además, comandos para la gestión de WordPress multisitio, para darte estructuras precreadas para el desarrollo de plugins o temas, internacionalización, reemplazo de cadenas en base de datos (search-replace), revisión de código, etc.

Si hay alguno de ellos que te interesa revisar y no está en mi explicación anterior, puedes acceder a su ayuda con una ejecución como la siguiente:
wp search-replace --help

Esto mostrará la ayuda específica del subcomando, explicándote cada uno de los argumentos o subopciones que tiene:

ayuda wpcli

Cómo se usa WP-CLI


La teoría está muy bien, pero la práctica hace al maestro. Ahora que tienes unas nociones básicas de lo que hace wp-cli y sus diferentes subcomandos, es el momento de entrar en faena y ver, sobre el terreno, todas las opciones que pone al alcance de tu mano.

Lo primero que vamos a hacer es instalar WordPress en nuestro servidor. Para ello, debes cambiar al directorio donde apunta tu dominio (por ejemplo, en cPanel, la carpeta public_html para el dominio principal) y ejecutar los 3 comandos que te dejo a continuación:
wp core download

wp config create --dbname='wpcli_wp1' --dbuser='wpcli_wp1' --dbpass='claveAccesoBBDDWordpress'

wp core install --url='https://instalacion-wp-cli.tld' --title='Mi Blog' --admin_user='Fran' --admin_password='claveAccesoWordpress' --admin_email='fran@instalacion-wp-cli.tld' --skip-email --path=$(pwd)

wpcli-instalar-wordpress

La ejecución anterior nos dará un WordPress recién instalado en la última versión disponible. Ahora vamos a configurarlo con nuestra zona horaria. El comando “option” nos permite obtener y modificar distintas configuraciones de nuestro sitio web, tanto del propio WordPress como de plugins instalados:
wp option update timezone_string Europe/Madrid

Tendrás que confiar en mí o seguir los pasos que acabo de indicar para comprobar que realmente funciona, pero si ahora accedes a en un navegador (yo he usado este dominio, tú deberás usar el tuyo propio) podrás ver un WordPress recién instalado y listo para funcionar.

Lo primero que voy a hacer con la instalación de WordPress recién creada será activar el modo mantenimiento, para evitar que curiosos puedan acceder mientras realizo todo el trabajo:
wp maintenance-mode activate

wpcli-configurar

Este es el típico modo mantenimiento de WordPress. Quizá prefieras uno un poco más bonito, pero el efecto es el mismo.

Puesto que en mi instalación yo voy a trabajar de administrador pero va a haber gente que contribuya al proyecto creando artículos, vamos a crear un usuario con permisos de autor:
wp user create 'Juan' 'juan@instalacion-wp-cli.tld' --role=author --user_nicename=Juan --send-email

02-wpcli-configurar

De esta forma, Juan habrá recibido una notificación por correo electrónico de que ya tiene acceso a la nueva instancia de WordPress que acabo de crear y en la que vamos a trabajar.

Vamos ahora a instalar una serie de plugins que voy a necesitar para el proyecto. Me interesan:

Creo que por ahora es suficiente, así que vamos a ello. El comando que tenemos que lanzar para instalar y dejar activos todos los plugins a la vez es:
wp plugin install --activate litespeed-cache contact-form-7 honeypot-antispam wordpress-seo

03-wpcli-configurar

Podemos comprobar ahora que wp-cli tiene nuevos subcomandos, tal como te decía antes. Si escribo wp --help en mi terminal, puedo ver que tanto yoast-seo como litespeed han incluido sus propios subcomandos. Esto nos ayudará a, por ejemplo, automatizar el purgado de la caché de litespeed.

Lo siguiente es instalar un tema. En este caso, usaré GeneratePress:
wp theme install generatepress --activate

04-wpcli-configurar

Y puesto que el resto de temas no los necesito para nada, los listo y borro con los dos comandos que te dejo a continuación:
wp theme list
wp theme delete twentynineteen twentytwenty twentytwentyone

05-wpcli-configurar

Y, ya que estoy limpiando contenidos, voy a borrar los plugins que trae preinstalados y no necesito. Primero los listo y luego los elimino:
wp plugin list
wp plugin delete hello akismet

06-wpcli-configurar

Ahora que ya tengo una estructura básica, voy a añadir un menú a mi WordPress y configurarlo como principal:
wp menu create 'Main_menu'
wp menu location assign Main_menu primary

07-wpcli-configurar

Y, finalmente y puesto que ya tenemos todos los componentes de la aplicación creados, vamos a añadirle algo de contenido demo, unos cuantos usuarios suscriptores y algunos posts. Podemos hacerlo fácilmente de la siguiente forma:
wp user generate --count=5 --role=subscriber
wp post generate --count=3 --post_content <<< $(curl -s -N http://loripsum.net/api/2 )

08-wpcli-configurar
Si ahora quisiera automatizar los despliegues (instalaciones y configuraciones iniciales) de WordPress, solo tengo que juntar todos los comandos anteriores en un archivo y darle permisos de ejecución. Cada vez que lo use, realizará todo el proceso sin esfuerzo y dejándome el terreno listo para comenzar el trabajo.

Como ves, wp-cli es una herramienta tremendamente útil para automatizar despliegues o acelerar gestiones que, de otra forma, te consumiría una cantidad considerable de tiempo mediante las gestiones por terminal. Sin embargo, sus utilidades no quedan aquí.

Si eres un desarrollador o quieres comenzar a navegar un poco en las entrañas de WordPress, wp-cli te servirá para la creación de estructuras básicas para el desarrollo de plugins, temas, etc., mediante su comando scaffold.

Vamos a usarlo para crear la estructura básica de un plugin que, por su nombre, podéis imaginaros lo que hace:
wp scaffold plugin plugin-realmente-lento --plugin_description='Plugin para ralentizar la aplicación WordPress'

09-wpcli-configurar

Tras introducir un par de líneas de código en el plugin, este ya cumple con su función: ralentizar la carga de WordPress.

A grandes rasgos puede no parecer el plugin más útil del mundo, pero servirá a modo ilustrativo para el siguiente subcomando que vamos a utilizar, profile.

Instalar subcomandos de WP-CLI


Si bien profile es un subcomando que está listado como los principales de wp-cli, como podemos ver en su sitio oficial https://developer.wordpress.org/cli/commands/profile/, no viene preinstalado por defecto.

Al igual que algunos plugins nos han creado subcomandos de wp-cli, se pueden extender las funcionalidades de esta herramienta mediante paquetes creados por algunos desarrolladores. Incluso podrías crear alguno para automatizar ciertos procesos repetitivos o con elevados consumos a través del interfaz gráfico, acelerando así un poco más las gestiones.

Bien, como dice la documentación, para instalar el subcomando profile debemos escribir:
wp package install wp-cli/profile-command

01-wpcli-paquetes-adicionales

Nuevamente, si usamos wp --help veremos que se nos ha añadido otro comando, profile.

Para el ejemplo nos interesan dos subcomandos: stage y hook.

Lo primero que vamos a hacer es analizar en qué consume WordPress su tiempo cuando le pedimos que cargue la página de inicio (podemos testear otras URL con algunos de sus argumentos):
wp profile stage --fields=stage,time,query_time,hook_time,request_time

02-wpcli-paquetes-adicionales

Podemos ver que ‘template’ consume ¡10 segundos! Vamos a analizar qué puede estar provocando esta situación.

Si analizamos cómo funciona template, veremos qué tarda en cargar en esta parte de nuestro WordPress:
wp profile stage template --fields=hook,callback_count,time,query_time

03-wpcli-paquetes-adicionales

Como se aprecia en la captura, el hook wp_head tarda los 10 segundos que habíamos determinado anteriormente. Vamos a determinar el porqué.

Con el subcomando hook podemos ver todos los hooks de WordPress y cuánto tarda en cargar cada uno de ellos. Usaremos el argumento --spotlight para que no nos muestre aquellos cuyos tiempos de carga son irrelevantes:
wp profile hook --spotlight --fields=hook,time,query_time,request_time

04-wpcli-paquetes-adicionales

Nuevamente tenemos información de que hay un hook, en concreto wp_head como ya hemos visto antes, que tarda 10 segundos en cargar. Vamos a navegar en él.
wp profile hook wp_head --spotlight --fields=callback,time

05-wpcli-paquetes-adicionales

Podemos ver que hay un callback (función, en este caso) llamada stremely_slow_function() que tarda en cargar 10 segundos y cuya ubicación es plugin-realmente-lento/plugin-realmente-lento.php; concretamente, la línea 17.

Si abrimos el archivo, podemos ver que la función hace lo siguiente:
function function_realmente_lenta() {
sleep(10);
}

Básicamente, se trata de una función dummy. Simplemente espera 10 segundos antes de hacer nada, por lo que podríamos quitarla de nuestra aplicación, por ejemplo, desactivando el plugin.
wp plugin deactivate plugin-realmente-lento

Tras desactivar ese plugin tan malo, mi WordPress vuelve a cargar en tiempos normales:
wp profile stage

06-wpcli-paquetes-adicionales

Conclusión


Como has podido ver, wp-cli es una herramienta muy versátil que te permitirá economizar tu tiempo de manera que puedas invertirlo en que tus desarrollos sean más eficientes o ayudarte a encontrar esos cuellos de botella con los que tanto cuesta dar mediante las herramientas que proporciona la interfaz gráfica.

Si necesitas que un experto en WordPress analice tu sitio web, no dudes en contactar con nosotros para que podamos echarte una mano. Disponemos de un departamento especializado que puede revisar todo esto y mucho más.
Fran Rey
Fran Rey

Fran Rey, integrante del equipo de Soporte Técnico de Raiola Networks. Apasionado de Linux, el software libre y su filosofía.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 4 comentarios en Guía de WP-CLI: Administra WordPress desde tu terminal
Avatar del autor del comentario

Jabi

07/03/2021 a las 01:03
Artículo perfecto para enviarle a todos esos espabilados que se venden como desarrolladores WordPress y lo único que hacen es usar maquetadores. A la mínima que vienen problemas, abrimos un ticket a la empresa de hosting y les echamos la culpa para esconder nuestra ineptitud :)
Responder
Avatar del autor del comentario

Fran Rey

09/03/2021 a las 15:12
¡Muchas gracias por tu comentario Jabi!
Responder
Avatar del autor del comentario

Rafael

24/03/2021 a las 09:18
Pues tengo una duda después de leer tu estupendo artículo. Lo cierto es que desconocía la existencia y la potencia de wp-cli. Tengo varias carpetas con distintas instalaciones de WP (no es un multisitio, sino instalaciones totalmente independientes con sus propias configuraciones ftp y de base de datos independientes). Me ha tocado migrar el dominio, y lo más sencillo es hacerlo con wp-cli. Mi duda es la siguiente: Cuando ejecuto wp ¿tengo que estar situado en la carpeta correspondiente a la instalación concreta de WP, donde se encuentre el fichero wp-config.php? Porque no me arriesgo a hacer un "search and replace" sin saber exactamente de dónde saca los datos wp-cli.

Gracias de antemano
Responder
Avatar del autor del comentario

Fran Rey

29/03/2021 a las 15:16
Hola Rafael, wp-cli ofrece varias opciones para gestionar lo que me comentas:

- la primera es la que tú dices, cambiar al directorio de instalación del WordPress y ejecutar desde ahí los comandos. De esta forma wp-cli será capaz de detectar la aplicación y su base de datos correspondiente.

- la segunda es que, al invocar a wp-cli, lo hagas con el argumento --path, por ejemplo wp-cli --path=/home/usuario/public_html subcomando
En ese caso dará igual en qué carpeta estés trabajando, wp-cli buscará el WordPress en la ruta que le digas.

- la última de todas es mediante una conexión SSH, ya que wp-cli no te obliga a estar logueado en el servidor donde tienes alojado el WordPress. Esta característica es genial para administrar aplicaciones de forma remota.
La sintaxis es: wp-cli --allow-root --ssh=usuario@servidor.tld:/home/wpcli/web/public_html/ subcomando
De esta manera podrás gestionar aplicaciones remotas, aunque para cada ejecución te pedirá la contraseña. Lo mejor en estos casos es tener configurado acceso mediante llaves SSH, aquí tienes algo de información al respecto: https://raiolanetworks.com/blog/ssh/#como_instalar_un_servidor_ssh

Un saludo
Responder

Deja una respuesta

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