WP-CLI, la navaja suiza de Wordpress para la terminal

WP-CLI es una interfaz de línea de comandos que nos permite desde mejorar nuestro workflow durante el desarrollo, a agilizar la resolución de errores, actualizaciones, activación de themes y plugins y esto solo para empezar.

Instalando WP-CLI

En nuestros servicios la instalación es tan sencilla como acceder a la terminal y ejecutar:

composer global require wp-cli/wp-cli

De esta forma instalamos el paquete wp-cli para que esté disponible en toda nuestra cuenta.

Esperamos a que finalice y tendremos disponible un nuevo comando llamado wp.

Si al ejecutar wp recibes un mensaje de error, recuerda añadir la ruta de composer al fichero .bashrc.

Instalando Wordpress

Aunque ya ofrecemos una forma sencilla de instalar Wordpress, algunos usuarios prefieren la instalación manual, wp-cli permite realizar la misma desde la terminal.

Nos posicionamos en el directorio donde queremos instalarlo, preferiblemente un directorio vacío y como primer paso descargamos el core de Wordpress.

wp core download

A continuación configuramos los valores de conexión a la base de datos.

wp core config --dbname=base_datos \ 
--dbuser=usuario --dbpass=password \ 
--dbhost=localhost --dbprefix=wp_

Básicamente debes sustituir el nombre de la base de datos, usuario y password por los que correspondan a la configuración MySQL que has creado previamente.

Finalmente ejecutamos la instalación configurando algunos valores adicionales como dirección, usuario admin, entre otros.

wp core install --url=https://dominio.com \ 
--title=Sitio --admin_user=usuario \
--admin_password=password --admin_email=mi@email.com

Reinstalando Wordpress

Puede que hayas sufrido un hacking o que simplemente algo no funcione y necesites asegurarte que Wordpress está como debe, para ello puedes reinstalarlo con un simple comando.

wp core download --skip-content --force

Este comando solo reinstala el core, no perderás nada, plugins, themes y contenidos se mantendrán intactos.

Cambiar la url principal de Wordpress

Si por cambios de dominio o por pasar de desarrollo a producción, necesitas cambiar la url principal de Wordpress podrás ejecutar:

wp option update home 'https://nuevodominio.com'
wp option update siteurl 'https://nuevodominio.com'

Donde nuevodominio.com sería la nueva url que Wordpress usará como principal.

Listado de plugins

Ejecutando wp plugin list puedes obtener un listado de plugins, su estado y la versión en uso.

Instalación de plugins

Instalar uno u varios plugins es tan fácil como ejecutar:

wp plugin install plugin1 plugin2 --activate

Añadiendo al final --activate hacemos que además de instalarlos, los active.

Si no conocemos el nombre que debemos indicar respecto a algún plugin, podemos usar el buscador para localizarlo, el comando sería wp plugin search busqueda.

También podemos indicar la url del zip que contiene el plugin:

wp plugin install https://url/fichero.zip --activate

Desactivar uno o varios plugins

Puedes desactivar plugins específicos con wp plugin deactivate plugin, donde plugin sería el nombre que puedes obtener del listado de plugins instalados wp plugin list.

En caso de necesitar desactivar todos ejecuta wp plugin deactivate --all.

Actualizar plugins

Para actualizar un plugin, ejecuta wp plugin update nombre-plugin.

Búsqueda y reemplazo masivo de coincidencias en la base de datos

Esta función es una de las más potentes de wp-cli, la opción de buscar y reemplazar coincidencias en la base de datos.

Por ejemplo, has cambiado la dirección de tu web y muchas direcciones en el contenido de los posts siguen apuntando a la anterior.

En ese caso podrías ejecutar:

wp search-replace antiguo.com nuevo.com

Todas las coincidencias de antiguo.com se reemplazarían automáticamente con nuevo.com.

Si prefieres ver los cambios que realizaría antes de aplicarlos finalmente, puedes añadir al final del comando --dry-run.

Pero podemos ir más allá, esta opción permite usar expresiones regulares, lo que significa que podremos modificaciones masivas mucho más flexibles.

Por ejemplo, imaginemos que tenemos un iframe en todas las páginas y posts que nos gustaría eliminar, pero por desgracia tiene variaciones en el tamaño, orden de los atributos e incluso dominio.

<iframe src='https://dominio/header.htm' frameborder='0' scrolling='no' width='620' height='70'></iframe>
<iframe src='http://dominio/header.htm' frameborder='0' scrolling='no' width='10' height='20'></iframe>
<iframe src='https://www.dominio/header.htm' scrolling='yes' ></iframe>

Vemos que el único patrón que podemos seguir es que se trata siempre del fichero header.htm y por otro lado que es un iframe, nada más.

Con esto en mente podemos crear una expresión regular que al buscar coincida con todas las opciones:

<iframe.*header.htm.*><\/iframe>

En esta expresión estamos diciendo que se busque un iframe donde header.htm aparezca dentro de la apertura del iframe, pero que pueda tener delante y detrás cualquier cosa, de esa forma creará una coincidencia amplia con los tres ejemplos que hemos puesto y con cualquier otra variación.

Ya con nuestra expresión regular podemos ejecutar la búsqueda y reemplazo.

wp-cli search-replace '<iframe.*header.htm.*><\/iframe>' '' \ 
--regex --precise --regex-flags='i' wp_posts \
--include-columns=post_content \ 
--dry-run

En la búsqueda hemos añadido nuestra nueva expresión regular, primero la expresión y luego la sustitución, dado que queremos eliminar, indicamos una cadena de texto vacía, a continuación hemos añadido --regex --precise --regex-flags='i' para que la herramienta sepa que estamos haciendo una búsqueda de tipo regex, tras esto la tabla en la que queremos buscar y la columna, al ser el contenido de los posts, indicamos post_content, finalmente --dry-run para que nos arroje las coincidencias sin reemplazar nada y asegurarnos de que nuestra expresión regular está funcionando antes de realizar finalmente el reemplazo masivo.

Las expresiones regulares son una herramienta muy potente pero difícil de entender al principio, el siguiente tutorial interactivo te ayudaría a entender mejor su sintaxis y capacidades.

Importar y exportar la base de datos

La importación y exportación de una base de datos se puede realizar desde phpMyAdmin o con el comando mysql, no obstante por conveniencia puede ser util hacerlo directamente con el comando wp.

wp db export generará en el directorio un fichero .sql con todo el contenido de la base de datos, mientras que wp db import fichero.sql, importará fichero.sql a la base de datos.

Listado de eventos wp-cron

wp cron event list muestra un listado de eventos recurrentes ejecutados por Wordpress así como su intervalo de ejecución, fecha de la próxima ejecución y de la anterior, realmente útil en caso de depurar problemas de rendimiento que puedan estar relacionados con estas tareas.