Webs y aplicaciones

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

Revisado el · wordpress · wp cli

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.

Antes de ejecutar comandos que modifican datos

Los comandos de actualización, reemplazo, importación o reinstalación deben probarse primero en staging. Exporta la base, verifica el fichero y conserva una copia fuera del hosting:

umask 077
wp db export wp-antes-del-cambio.sql
sha256sum wp-antes-del-cambio.sql > wp-antes-del-cambio.sql.sha256
chmod 400 wp-antes-del-cambio.sql wp-antes-del-cambio.sql.sha256
sha256sum -c wp-antes-del-cambio.sql.sha256

Cuando el comando admita --dry-run, úsalo obligatoriamente y revisa el recuento y una muestra. Antes de producción, detén las escrituras; después valida la web y conserva la exportación hasta terminar el periodo de recuperación.

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 una base de datos nueva y vacía. No incluyas la contraseña en los argumentos, porque puede quedar en el historial y en la lista de procesos; solicita el valor mediante el prompt de WP-CLI:

wp config create --dbname=base_datos \
  --dbuser=usuario \
  --dbhost=localhost \
  --dbprefix=wp_ \
  --prompt=dbpass

Sustituye el nombre y el usuario por los de la configuración MySQL que has creado previamente. También puedes usar un fichero de configuración protegido con permisos 600, fuera del directorio público, y eliminarlo cuando termine la instalación.

Finalmente ejecutamos la instalación. Genera una contraseña de administrador larga, aleatoria y única, y facilítala mediante el prompt, nunca como argumento:

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

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 reemplaza ficheros del núcleo. Haz antes una copia actual, revisa los ficheros personalizados de la raíz y ejecuta wp core verify-checksums antes y después. Si falla la validación, restaura los ficheros desde la copia verificada.

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, exporta primero la base y ejecuta obligatoriamente una simulación limitada a las tablas necesarias:

wp search-replace 'antiguo.example' 'nuevo.example' wp_posts wp_postmeta \
  --precise --report-changed-only --dry-run

WP-CLI respeta los datos serializados. Revisa el informe y una muestra en staging; solo después repite exactamente el comando sin --dry-run. Si el alcance no es el esperado, restringe tablas y columnas en lugar de hacer un reemplazo global.

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\b[^>]{0,2000}?header\.htm[^>]{0,2000}?>[\s\S]{0,10000}?<\/iframe>

La expresión usa cuantificadores no codiciosos y límites máximos para no atravesar contenido arbitrario ni capturar varios bloques por accidente. Ajusta esos límites a tu contenido y ensáyala con una muestra conocida.

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

wp search-replace '<iframe\b[^>]{0,2000}?header\.htm[^>]{0,2000}?>[\s\S]{0,10000}?<\/iframe>' '' \
--regex --precise --regex-flags='i' wp_posts \
--include-columns=post_content \
--report-changed-only \
--dry-run

La búsqueda queda limitada a wp_posts.post_content y --dry-run informa de las coincidencias sin reemplazarlas. Revisa el resultado en staging y vuelve a exportar la base antes de ejecutar el comando real en producción.

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 genera un fichero .sql con el contenido de la base de datos. Verifica su checksum y prueba la recuperación antes de depender de él.

wp db import fichero.sql escribe sobre la base configurada y puede mezclar datos o sobrescribir tablas. Para una restauración segura, crea una base nueva y vacía, configura un clon para apuntar a ella e importa allí. Compara esquema, recuentos y funcionamiento; solo después detén las escrituras y cambia las credenciales de la aplicación. Mantén la base original intacta para volver a sus credenciales si la validación posterior falla.

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.

También te puede ayudar

  1. Actualización de PHP en WordPress, versiones antiguas y mensaje de advertencia
  2. Cambiar ruta asociada a la librería de Wordpress
  3. Configurar Wordpress para usar SMTP
  4. Desactivar actualizaciones automáticas en Wordpress