WP-CLI

¿Qué es WP-CLI?

WP-CLI, o WordPress Command Line Interface, es una serie de herramientas en línea de comandos que ofrecen diversas funcionalidades para gestionar sitios WordPress.

La instalación de WP-CLI es sencilla. En principio tienes que descargar un archivo PHP y ponerlo en algún lugar de tu servidor para poder ejecutarlo desde donde te encuentres. Puedes descargar WP-CLI desde su repositorio en GitHub, tecleando lo siguiente:

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

Lo siguiente es hacer que el fichero sea ejecutable:

chmod +x wpcli.phar

Y para finalizar hay que mover el archivo a una carpeta, para que puedas ejecutarlo desde donde quieras:

sudo mv wpcli.phar /usr/local/bin/wp

Y con esto ya lo tienes instalado.

¿Que puedes hacer con WP-CLI?

Vamos a ver ahora una serie de tareas que puedes realizar con WP-CLI

Instalar wordpress

Lo primero que tenemos que hacer es navegar hasta el directorio en el que quieres instalarlo e introducimos

wp core download

Luego instalamos la versíon y el idioma

wp core download version=4.2.2 locale=es_ES

Cuando se descargue crearemos  el archivo wp-config usando el comando

wp core config dbname=nombrebasededatos dbuser=nombreusuariobasededatos dbpass=clavebasededatos dbhost=localhost

Como ves, el comando utiliza los argumentos que le demos (que deberás adecuar como siempre a los datos de tu servidor) y creará un archivo wp-config.php con ellos. Para terminar, instalaremos WordPress con el comando core install:

wp core install –url=example.com  –title=”Título del sitio WordPress” –admin_user=nombreusuarioadmin –admin_password=claveusuarioadmin –admin_email=”[email protected]

Si tienes que actualizar una instalación de WordPress usaremos los comandos wp core update y wp core update-db para actualizar los archivos de WordPress y la base de datos.

wp core update
wp core updatedb
Tambien puedes comprobar la versión de wordpress
wp core version
Script de actualización
#!/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
Copia de seguridad de la base de datos
wp db export backup.sql

Administrar plugins

plugin status muestra información de los plugins instalados y su estado. A significa que está activo, I significa inactivo y UA que hay una actualización disponible, ej:

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 comandos relacionados con los plugins son installactivatedeactivateupdatedelete y search, que puedes usar como en estos ejemplos:

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

Lo mismos comandos que usas para administrar los plugins los puedes usar para administrar los temas, solo tienes que cambiar plugin por theme.

Tambien puedes crear un tema hijo vacio con el comando

wp scaffold child-theme my-child-theme –parent_theme=twentyfifteen –theme_name=’Mi tema hijo’ –author=’Marcos del Río’ –author_uri=https://devialia.com –theme_uri=https://devialia.com –activate

Manipular datos

Existen una serie de comandos sencillos para manipular datos como son post créatepost edit y post delete, ademas WP-CLI ofrece una serie de comandos mas avanzados. por ejemplo, si quieres crear una serie de post para probar un plugin.

wp generate posts count=100

También podrías exportar tu contenido actual y migrarlo a otra instalación de WordPress

wp plugin install wordpressimporter activate

Y luego ya puedes usar los comandos export e import para completar el proceso

wp export
wp import test.xml authors=create

 

Administrar revisiones de entradas

Puedes usar el plugin wp-revisions-cli, que no es ni más ni menos que una extensión para WP-CLI que añade la funcionalidad de administrar revisiones de entradas. Lo puedes instalar como un plugin WordPress normal, y te ofrece una serie de comandos como cleanlist y status. Por ejemplo, si utilizas el comando wp wp revisions list, obtendrás una  lista de las revisiones de las entradas existentes

<span class=”token operator”>+-</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span>
<span class=”token operator”>|</span> post_title <span class=”token operator”>|</span> post_parent <span class=”token operator”>|</span> <span class=”token constant”>ID</span> <span class=”token operator”>|</span>
<span class=”token operator”>+-</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span>
<span class=”token operator”>|</span> Hello world<span class=”token operator”>!</span> <span class=”token operator”>|</span> <span class=”token number”>1</span> <span class=”token operator”>|</span> <span class=”token number”>894</span> <span class=”token operator”>|</span>
<span class=”token operator”>+-</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span><span class=”token operator”>–</span><span class=”token operator”>–</span><span class=”token operator”>-+</span>

Administrar medios

Importación masiva de imágenes

wp media import carpeta_de_imagenes/*

Regenerar miniaturas

wp media regenerate

Operaciones con la base de datos

WP-CLI nos ofrece comandos para hacer queries

wp db query “SELECT id FROM wp_users;”

Buscar y reemplazar en la base de datos

Es una práctica habitual crear una web en un servidor local o de desarrollo una práctica y luego moverlo a otro servidor al terminar. La parte de copiar los archivos y migrar la base de datos son pasos relativamente sencillos. Ahora bien, la parte tediosa es que suelen quedar “restos” en este proceso, como el tener que reemplazar las URLs antiguas (de la instalación local o de desarrollo) almacenadas en los registros de la base de datos. Solemos solucionar este problema mediante plugins o consultas SQL, pero en ocasiones hay URLs en los datos internos en serie de la base de datos en los que una búsqueda y reemplazo normal no funcionarán.

WP-CLI, de nuevo, puede ayudarnos en esta tarea. Tenemos el comando search-replace para reemplazar la vieja URL con la nueva en todas las cadenas de la base de datos, incluidas aquellas que tengan datos internos en serie.

wp search-replace ‘dev.tusitio.com’ ‘www.sitio-cliente.com’

Operaciones en WordPress Multisite

Crear un script para para instalar un plugin Importador de WordPress en un sitio concreto:

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

Ejecutar comandos de manera sencilla

Conectarse a un servidor y navegar hasta la ruta correcta para ejecutar comandos WP-CLI puede ser algo tedioso. En su lugar puedes usar WP-CLI SSH, un paquete adicional que te permite ejecutar comandos WP-CLI desde tu terminal local, si tener que conectarte al servidor remoto.

Antes de instalar WP-CLI SSH tienes que especificar la ubicación del paquete índice de WP-CLI en la carpeta ~/.wp-cli. (Si no existe crea este directorio.)

cd ~/.wp-cli

También hay que instalar el Composer si no lo has hecho anteriormente

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

A continuación crea (o usa si ya existe) el archivo composer.json

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

Añade el paquete índice de WP-CLI

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

Luego crea (o usa si ya existe) el archivo config.yml, y añádele estas líneas

require:
– vendor/autoload.php

Con esto ya estaría todo listo para instalar el paquete WP-CLI SSH

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

Lo siguiente es crear el archivo de configuración y configurar los servidores. Crea un archivo wp-cli.yml y añádele los siguientes ajustes

ssh:

production:
# El localizador %pseudotty% se reemplaza con -t o -T dependiendo de si estás canalizando la salida o no
# El localizador %cmd% se reemplaza con el comando originalmente lanzado por WP-CLI
cmd: ssh %pseudotty% production.example.com %cmd%

# Pasamos WP-CLI al servidor remoto mediante el comando –url
url: produccion.ejemplo.com

# Cambiamos (cd) a esta ruta del servidor remoto antes de ejecutar WP-CLI
path: /var/www/produccion

# WP-CLI en SSH parará si tecleas alguno de estos comandos:
– db drop
– db reset

En este ejemplo anterior, por supuesto, reemplaza produccion.ejemplo.com por la URL de tu servidor y /var/www/produccion por la ruta a tu instalación de WordPress. En la sección disabled commands puedes definir comandos WP-CLI no permitidos en el servidor remoto. Puedes crear tantos servidores como quieras, usando nombres diferentes para cada uno.

Si todo se ha configurado correctamente ya podrás ejecutar comandos utilizando el subcomando ssh y añadiendo el argumento del servidor

wp ssh plugin status –host=produccion

Si estuvieses trabajando principalmente en el servidor remoto también tienes la opción de crear un alias en tu archivo ~/.bash_profile ,para que el comando wp use ese servidor por defecto

alias wp=”wp ssh –host=produccion”

Usos avanzados de WP-Cli

Puedes extender la funcionalidad base de WP-CLI usando tus códigos. Hay dos maneras de hacerlo. Puedes cargar y ejecutar código PHP desde un archivo o crear tu propio plugin que genere comandos personalizados.

Ejecutar un archivo PHP

Si quieres probar un código PHP no necesitas incluirlo en un archivo de WordPress. WP-CLI dispone del comando eval-file que ejecuta comandos PHP que se hayan cargado previamente en WordPress. Por ejemplo, si quieres imprimir el título de una entrada WordPress aleatoria el código para esta acción sería algo así

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”;

Lo guardas en un archivo llamado script.php y compruebas la respuesta tecleando este comando

wp eval-file ./script.php

Comandos disponibles

ComandoDescripción
cacheAdministrar  la cache
capModificar los WP capabilities.
cliInformación sobre CLI
commentAdministrar comentarios.
coreDescargar , instalar y actualizar el core de WordPress.
dbAcciones en la base de datos.
evalEjecutar codigo PHP antes de cargar wordpress.
eval-fileCargar y ejecutar un archivo  PHP antes de cargar WordPress.
exportExportar contenido en archivos  WXR .
helpAyuda .
importImportar contenido de un archivo  WXR.
mediaAdministrar archivos.
menuCrear, actualizar y listar menus.
network Administrar Custom fields
optionAdministrar opciones.
pluginAdministrar plugins.
postAdministrar Posts.
rewriteAdministrar reglas.
roleAdministrar roles de usuario.
scaffoldGenera codigo para Custom types, taxonomias, custom fields,  etc.
search-replaceBuscar y reemplazar cadenas en la base de datos.
shellConsola PHP.
sidebarAdministrar sidebars
siteOptimizar funciones dle sitio..
super-adminAgregar , eliminar , actualizar usuarios admin de la red WP.
termAdministrar terms.
themeAdministrar temas.
transientAdministrar  transients.
userAdministrar usuarios.
widgetAdministrar Widgets.