Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Gestionar WordPress desde la línea de comandos con wp-cli

Imago voragine.net
[actualizado el ]

wp-cli es una interfaz de línea de comandos para WordPress. Permite hacer multitud de operaciones de administración y mantenimiento de una instalación de WordPress. Por un lado agiliza estas operaciones y por otro permite automatizarlas, ejecutándolas en modo no interactivo usando cron y un script de bash por ejemplo.

Aquí recojo cómo llevar a cabo tareas básicas con WordPress usando wp-cli. Para cualquier otro uso se puede consultar la documentación oficial de wp-cli.

Cómo instalar wp-cli

En realidad wp-cli no necesita instalación. Se puede descargar, por ejemplo usando curl, y empezar a usar directamente:

usuario@maquina:~$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Para que su uso sea más práctico, y esté disponible para todos los usuarios del sistema llamando sencillamente al comando wp, se puede hacer lo siguiente:

usuario@maquina:~$ chmod +x wp-cli.phar
usuario@maquina:~$ sudo mv wp-cli.phar /usr/local/bin/wp

Para comprobar que wp-cli está instalado correctamente:

usuario@maquina:~$ wp --info
OS:     Linux 5.3.0-2-amd64 #1 SMP Debian 5.3.9-3 (2019-11-19) x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php7.3
PHP version:    7.3.10-1+b1
php.ini used:   /etc/php/7.3/cli/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:       /home/usuario
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.2.0

Cómo actualizar wp-cli

wp-cli se puede actualizar usando wp-cli:

usuario@maquina:~$ wp cli update
You have version 2.2.0. Would you like to update to 2.4.0? [y/n] y
Downloading from https://github.com/wp-cli/wp-cli/releases/download/v2.4.0/wp-cli-2.4.0.phar..
md5 hash verified:
New version works. Proceeding to replace.
Success: Updated WP-CLI to 2.4.0.

Cómo instalar WordPress con wp-cli

Para realizar cualquier operación con wp-cli lo mejor es hacerlo con el usuario del servidor web y desde el directorio donde esté o se quiera instalar WordPress. Para los siguientes ejemplos voy a suponer que el usuario es «usuario» y la ubicación de WordPress /var/www/example.org, en el servidor «maquina»:

Para instalar WordPress con wp-cli, primero hay que descargar la última versión de WordPress:

usuario@maquina:~$ cd /var/www/example.org
usuario@maquina:~$ wp core download
Downloading WordPress 5.2.1 (en_US)...
Success: WordPress downloaded.

Luego se genera el archivo wp-config.php con los datos de la base de datos asociada al WordPress. Es buena idea no teclear directamente la contraseña de base de datos en el comando ya que quedaría registrada en el historial de comandos. Para evitarlo se puede usar el parámetro –prompt que permite pasar valores desde un archivo de texto previamente creado, en este caso dbpass.txt.

usuario@maquina:~$ wp config create --dbname= --dbuser= --dbhost=localhost --dbprefix=lcn_ --prompt=dbpass < dbpass.txt
Success: Generated 'wp-config.php' file.
usuario@maquina:~$ rm userpass.txt

Ahora si se puede instalar WordPress. En este paso se creará la cuenta de un usuario administrador. Igual que en el paso anterior, para no teclear directamente la contraseña en la línea de comandos, volvemos a usar el parámetro --promp:

usuario@maquina:~$ wp core install --url=example.org --title="Testing site" --admin_user=supervisor --admin_email=info@example.org --prompt=admin_password < userpass.txt
Success: WordPress installed successfully.
usuario@maquina:~$ rm userpass.txt

Cómo actualizar WordPress

Para actualizar WordPress se puede usar el parámetro update del subcomando core. Pero antes se puede comprobar si hay actualizaciones disponibles:

usuario@maquina:~$ wp core check-update
+---------+-------------+-------------------------------------------------------------------+
| version | update_type | package_url |
+---------+-------------+-------------------------------------------------------------------+
| 5.3.1 | major | https://downloads.wordpress.org/release/es_ES/wordpress-5.3.1.zip |
+---------+-------------+-------------------------------------------------------------------+

Si hay, se puede actualizar:

usuario@maquina:~$ wp core update
Updating to version 5.3.1 (es_ES)...
Descargando la actualización desde https://downloads.wordpress.org/release/es_ES/wordpress-5.3.1.zip...
Descomprimiendo la actualización...
No files found that need cleaning up.
Success: WordPress updated successfully.

Cómo instalar y actualizar plugins

Si las tareas relativas al núcleo de WordPress se gestionan con el subcomando core, las que conciernen a los plugins usan el subcomando plugin.

Se puede ir intuyendo ya la sintaxis que usa wp-cli: siempre el comando wp, seguido de un subcomando que define el contexto (core, plugin, theme, cli…) y de una acción a realizar en dicho contexto (download, install, update, check-update…). Después se pueden añadir modificadores, como vemos en la orden para actualizar todos los plugins:

usuario@maquina:~$ wp plugin update --all
Enabling Maintenance mode...
Downloading update from https://downloads.wordpress.org/plugin/event-tickets.4.10.6.1.zip...
The authenticity of event-tickets.4.10.6.1.zip could not be verified as no signature was found.
Unpacking the update...
Installing the latest version...
Removing the old version of the plugin...
Plugin updated successfully.
Downloading update from https://downloads.wordpress.org/plugin/newsletter.6.0.7.zip...
The authenticity of newsletter.6.0.7.zip could not be verified as no signature was found.
Unpacking the update...
Installing the latest version...
Removing the old version of the plugin...
Plugin updated successfully.
Disabling Maintenance mode...
+-------------------------------+-------------+-------------+---------+
| name | old_version | new_version | status |
+-------------------------------+-------------+-------------+---------+
| event-tickets | 4.10.6 | 4.10.6.1 | Updated |
| newsletter | 6.0.6 | 6.0.7 | Updated |
+-------------------------------+-------------+-------------+---------+
Success: Updated 2 of 2 plugins.

También se puede usar el modificador –dry-run para probar la actualización antes de ejecutarla, por si da algún error:

usuario@maquina:~$ wp plugin update --all --dry-run

Cómo instalar y activar idiomas

Los idiomas disponibles del núcleo, de los plugins y los themes se gestionan desde el contexto language. Por ejemplo, para instalar la traducción española del núcleo:

usuario@maquina:~$ wp language core install es_ES
Downloading translation from https://downloads.wordpress.org/translation/core/5.3.2/es_ES.zip...
Unpacking the update...
Installing the latest version...
Removing the old version of the translation...
Translation updated successfully.
Language 'es_ES' installed.
Success: Installed 1 of 1 languages.

Y una vez instalada, para activarla:

usuario@maquina:~$ wp site switch-language es_ES
Success: Language activated.

Cómo crear y modificar usuarios

La gestión de usuarios se realiza en el contexto user. Por ejemplo, para listar todos los usuarios del sistema:

usuario@maquina:~$ wp user list
+----+------------+--------------+--------------------+---------------------+---------------+
| ID | user_login | display_name | user_email       | user_registered     | roles         |
+----+------------+--------------+--------------------+---------------------+---------------+
| 1 | supervisor  | supervisor   | info@example.org | 2019-11-28 14:09:27 | administrator |
+----+------------+--------------+--------------------+---------------------+---------------+

Para cambiar la contraseña de un usuario, por ejemplo del usuario «supervisor»:

usuario@maquina:~$ wp user update supervisor --promp=user_pass < userpass.txt
Success: Updated user 1.
usuario@maquina:~$ rm userpass.txt

Para crear un nuevo usuario y asignarle el rol editor:

usuario@maquina:~$ wp user create blas blas@example.org --role=editor
Success: Created user 2.
Password: &eRUrkL6IU^gDPTMP#h03

Cómo instalar, actualizar y activar themes

La gestión de themes se realiza en el contexto theme. Para actualizar todos los themes de una instalación:

usuario@maquina:~$ wp theme update --all
Activando el modo mantenimiento...
Descargando la actualización desde https://downloads.wordpress.org/theme/twentyfifteen.2.5.zip...
Descomprimiendo la actualización...
Instalando la última versión...
Eliminando la versión antigua del tema...
El tema se ha actualizado con éxito.
Descargando la actualización desde https://downloads.wordpress.org/theme/twentyfourteen.2.7.zip...
Descomprimiendo la actualización...
Instalando la última versión...
Eliminando la versión antigua del tema...
El tema se ha actualizado con éxito.
Descargando la actualización desde https://downloads.wordpress.org/theme/twentynineteen.1.4.zip...
Descomprimiendo la actualización...
Instalando la última versión...
Eliminando la versión antigua del tema...
El tema se ha actualizado con éxito.
Descargando la actualización desde https://downloads.wordpress.org/theme/twentythirteen.2.9.zip...
Descomprimiendo la actualización...
Instalando la última versión...
Eliminando la versión antigua del tema...
El tema se ha actualizado con éxito.
Desactivando el modo mantenimiento...
+----------------+-------------+-------------+---------+
| name | old_version | new_version | status |
+----------------+-------------+-------------+---------+
| twentyfifteen | 2.2 | 2.5 | Updated |
| twentyfourteen | 2.4 | 2.7 | Updated |
| twentynineteen | 1.1 | 1.4 | Updated |
| twentythirteen | 2.6 | 2.9 | Updated |
+----------------+-------------+-------------+---------+
Success: Updated 4 of 4 themes.

Para cambiar el theme activo:

usuario@maquina:~$ wp theme activate twentytwenty
Success: Switched to 'Twenty Twenty' theme.

Y para instalar un nuevo theme, primero podemos hacer una búsqueda en el repositorio de themes de wordpress.org:

usuario@maquina:~$ wp theme search flat-design
Success: Showing 1 of 1 themes.
+------+------+--------+
| name | slug | rating |
+------+------+--------+
| Tuto | tuto | 100    |
+------+------+--------+

Y luego instalar uno de los resultados, y con el parámetro --activate activarlo directamente:

usuario@maquina:~$ wp theme install tuto --activate
Installing Tuto (1.2.7)
Descargando el paquete de instalación desde https://downloads.wordpress.org/theme/tuto.1.2.7.zip...
Descomprimiendo...
Instalando el tema...
El tema se ha instalado correctamente.
Activating 'tuto'...
Success: Switched to 'Tuto' theme.
Success: Installed 1 of 1 themes.

Cómo hacer sustituciones en base de datos

wp-cli permite buscar y remplazar una cadena de texto en una o varias tablas de la base de datos con el contexto search-replace. Esto es muy útil por ejemplo cuando se está migrando un sitio que se está desarrollando en local, al servidor en producción donde tendrá su dominio definitivo. Antes de hacer una modificación se puede comprobar qué se modificará usando el parámetro --dry-run:

usuario@maquina:~$ wp search-replace --skip-tables=arac_users 'http://localhost' 'http://example.org' --dry-run
+--------------------+-----------------------+--------------+------+
| Table              | Column                | Replacements | Type |
+--------------------+-----------------------+--------------+------+
| arac_commentmeta   | meta_key              | 0            | SQL  |
| arac_commentmeta   | meta_value            | 0            | SQL  |
| arac_comments      | comment_author        | 0            | SQL  |
| arac_comments      | comment_author_email  | 0            | SQL  |
| arac_comments      | comment_author_url    | 0            | SQL  |
| arac_comments      | comment_author_IP     | 0            | SQL  |
| arac_comments      | comment_content       | 0            | SQL  |
| arac_comments      | comment_approved      | 0            | SQL  |
| arac_comments      | comment_agent         | 0            | SQL  |
| arac_comments      | comment_type          | 0            | SQL  |
| arac_links         | link_url              | 0            | SQL  |
| arac_links         | link_name             | 0            | SQL  |
| arac_links         | link_image            | 0            | SQL  |
| arac_links         | link_target           | 0            | SQL  |
| arac_links         | link_description      | 0            | SQL  |
| arac_links         | link_visible          | 0            | SQL  |
| arac_links         | link_rel              | 0            | SQL  |
| arac_links         | link_notes            | 0            | SQL  |
| arac_links         | link_rss              | 0            | SQL  |
| arac_options       | option_name           | 0            | SQL  |
| arac_options       | option_value          | 1            | PHP  |
| arac_options       | autoload              | 0            | SQL  |
| arac_postmeta      | meta_key              | 0            | SQL  |
| arac_postmeta      | meta_value            | 13           | PHP  |
| arac_posts         | post_content          | 26           | SQL  |
| arac_posts         | post_title            | 0            | SQL  |
| arac_posts         | post_excerpt          | 14           | SQL  |
| arac_posts         | post_status           | 0            | SQL  |
| arac_posts         | comment_status        | 0            | SQL  |
| arac_posts         | ping_status           | 0            | SQL  |
| arac_posts         | post_password         | 0            | SQL  |
| arac_posts         | post_name             | 0            | SQL  |
| arac_posts         | to_ping               | 0            | SQL  |
| arac_posts         | pinged                | 0            | SQL  |
| arac_posts         | post_content_filtered | 0            | SQL  |
| arac_posts         | guid                  | 50           | SQL  |
| arac_posts         | post_type             | 0            | SQL  |
| arac_posts         | post_mime_type        | 0            | SQL  |
| arac_term_taxonomy | taxonomy              | 0            | SQL  |
| arac_term_taxonomy | description           | 0            | SQL  |
| arac_termmeta      | meta_key              | 0            | SQL  |
| arac_termmeta      | meta_value            | 0            | SQL  |
| arac_terms         | name                  | 0            | SQL  |
| arac_terms         | slug                  | 0            | SQL  |
| arac_usermeta      | meta_key              | 0            | SQL  |
| arac_usermeta      | meta_value            | 0            | PHP  |
| arac_users         | user_login            | 0            | SQL  |
| arac_users         | user_nicename         | 0            | SQL  |
| arac_users         | user_email            | 0            | SQL  |
| arac_users         | user_url              | 0            | SQL  |
| arac_users         | user_activation_key   | 0            | SQL  |
| arac_users         | display_name          | 0            | SQL  |
+--------------------+-----------------------+--------------+------+
Success: 104 replacements to be made.

Si todo está bien, se puede lanzar la orden sin el dry-run. search-replace permite usar expresiones regulares y hace sustituciones en registros en formato serializado. También se puede limitar la sustitución a una serie de tablas u omitir algunas de ellas, como muestra el ejemplo anterior el parámetro skip-tables.

Conclusión

wp-cli permite hacer cualquier tarea de administración y mantenimiento de una instalación de WordPress, y también de gestión del contenido. En la sección de comandos del manual oficial de wp-cli hay multitud de ejemplos de cada contexto y cada comando.

Y por supuesto cualquiera de estos comandos se puede ejecutar usando un script de bash, lo que permite automatizar tareas y ejecutarlas de manera periódica usando el cron del sistema, por ejemplo.

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks