Oferta SiteGround Black Friday

WP-CLI La interfaz de comandos de WordPress – Guía de uso

Aunque la interfaz de comandos nunca ha sido muy popular entre los usuarios finales, para los desarrolladores es casi siempre la mejor opción ya que ofrece herramientas que mejoran la velocidad y la productividad en todos los procesos.

Puede que te suene raro que una interfaz en línea de comandos pueda ser útil, no digamos menor, y quizás dudes que puedas realizar tareas de todo tipo de manera más fácil que con una interfaz gráfica, pero así es, y es lo que vamos a aprender en este artículo, al menos en lo referente a WP-CLI, la interfaz de comandos para realizar tareas en WordPress.

Y es que la interfaz gráfica de WordPress ha avanzado mucho, pero cuando queremos realizar tareas administrativas o de desarrollo, no hay nada más eficaz y rápido que la interfaz de línea de comandos.

¿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.

¿Cómo se instala WP-CLI?

Nota: A partir de aquí es necesario disponer de un entorno tipo UNIX, ya sea Linux, OS X o FreeBSD. Si utilizas Windows puedes usar herramientas de línea de comandos como Cygwin o usar una máquina virtual.

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 wp-cli.phar

Y para finalizar hay que mover el archivo a una carpeta, para que puedas ejecutarlo desde donde quieras. Es mejor si renombres el archivo a algo que te sea fácil de recordar y teclear. La mayoría de la gente lo renombre simplemente a  wp pues seguro que de eso te acuerdas. Lo harías así:

sudo mv wp-cli.phar /usr/local/bin/wp

Con eso ya lo tienes instalado, y ya podrías teclear comandos WP-CLI. Puedes comprobar, si lo prefieres, si el proceso de instalación se ha completado con éxito tecleando el siguiente comando (ya con el ejecutable renombrado, acuérdate):

wp --info

Si todo ha ido bien deberías ver algo parecido a lo siguiente:

PHP binary: /usr/bin/php
PHP version: 5.5.24
php.ini used: /etc/php.ini
WP-CLI root dir: phar://wp-cli.phar
WP-CLI global config: /Users/kouratoras/.wp-cli/config.yml
WP-CLI project config:
WP-CLI version: 0.19.2

¿Qué puedo hacer con WP-CLI?

Son muchas las tareas administrativas que puedes realizar con WP-CLI, vamos a ver las más comunes, y alguna quizás no tan común.

Instalar WordPress

Un comando básico de WP-CLI es wp core, que te ofrece una buena cantidad de potentes herramientas para administrar instalaciones de WordPress. Lo primero, lógicamente, sería descargar el paquete de WordPress. Así que tendríamos que navegar hasta el directorio donde queramos instalarlo y teclearemos esto:

wp core download

Con este comando descargamos la última versión de WordPress en inglés (en_US). Si queremos descargar otra versión o idioma usaremos los parámetros --version y --locale. Por ejemplo, para descargar la versión 4.2.2 en español de España teclearemos esto:

wp core download --version=4.2.2 --locale=es_ES

Una vez se complete la descarga podemos crear el archivo wp-config.php usando el comando  wp core config:

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

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 wp core install:

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

Actualizar WordPress

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

Como no hace falta que te recuerde, las actualizaciones de WordPress son importantísimas, no digamos las de seguridad y mantenimiento. Así que podemos hacerlas rápidamente con el comando wp core update y (si fuese necesario) el comando wp core update-db:

wp core update
wp core update-db

Otra cosa que puedes hacer es comprobar la versión actual de WordPress en tu instalación usando el comando wp core version:

wp core version

Quizás en principio pueda que no te parezca que usar la línea de comandos es más eficaz que hacerlo desde el escritorio de administración, pero si tienes que actualizar muchas instalaciones de WordPress te vas a ahorrar un montón de tiempo y clics. Puedes, por ejemplo, crear un script y actualizarlas todas de golpe:

#!/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

Y, en todos los casos, ya sabes que siempre hay que hacer una copia de seguridad de la base de datos antes de actualizar nada ¿no?, pues se hace así:

wp db export backup.sql

Administrar plugins

También, administrar plugins, es cosa de un sencillo comando. Por ejemplo, wp plugin status muestra información de los plugins instalados y su estad, (A significa que está activo, I significa inactivo y UA que hay una actualización disponible) mostrando algo así:

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

Por regla general, los mismos comandos que usas para administrar los plugins puedes usarlos para los temas, simplemente reemplazando plugin con theme, así que creo que ni merece la pena repetirnos ¿verdad?

Si quizás sea interesante resaltar el comando scaffold, que crea un tema hijo vacío, lo que facilita mucho este tipo de tarea. Se haría como en este ejemplo:

wp scaffold child-theme my-child-theme --parent_theme=twentyfifteen --theme_name='Mi tema hijo' --author='Fernando Tellado' --author_uri=https://ayudawp.com --theme_uri=https://ayudawp.com --activate

Manipular datos

Además de comandos sencillos como post créatepost edit y post delete, WP-CLI ofrece más herramientas para administrar contenidos. Si necesitas, por ejemplo, un montón de entradas para probar un código de un plugin o tema, puedes usar el comando wp generate posts para crearlos:

wp generate posts --count=1000

También podrías exportar tu contenido actual y migrarlo a otra instalación de WordPress, algo muy útil. Para hacerlo tienes primero que instalar el plugin Importador de WordPress, como siempre, así::

wp plugin install wordpress-importer --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

Ya sabes, y sino lo recordamos, que WordPress almacena todas las revisiones de entradas en la base de datos. Esto implica que vas a almacenar un montón de información en la tabla de entradas de tu base de datos, y como el espacio de servidores no es infinito, y es caro, no es mala idea poner algo de orden en este asunto.

Para poner control, 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:

+--------------+-------------+-----+
| post_title   | post_parent | ID  |
+--------------+-------------+-----+
| Hello world! | 1           | 894 |
+--------------+-------------+-----+

Administrar medios

Hay un montón de tareas administrativas que puedes simplificar relacionadas con las imágenes o medios en general. Para ello WP-CLI nos ofrece herramientas muy interesantes.

Importación masiva de imágenes

No es nada raro que un cliente tenga un montón de imágenes y te pida que las importes a si web. Hacer esto desde el escritorio de WordPress sería un horror, pero podemos llamar a WP-CLI para que venga a nuestro rescate con un simple comando:

wp media import carpeta_de_imagenes/*

Regenerar miniaturas

Una de las tareas que todo administrador de WordPress tiene que hacer alguna vez es regenerar las miniaturas de las imágenes que usaste en el proceso de desarrollo y creación de la web. Es verdad que podrías usar un plugin o incluso algún código PHP al uso para hacerlo, pero es más rápido y fácil hacerlo con un comando de WP-CLI:

wp media regenerate

Las posibilidades son infinitas, ya que puedes combinar varios comandos para especificar qué imágenes quieres editar. Por ejemplo, para regenerar las imágenes destacadas de las entradas de una categoría concreta usaríamos un comando así:

wp media regenerate $(wp eval 'foreach( get_posts(array("category" => 2,"fields" => "ids")) as $id ) { echo get_post_thumbnail_id($id). " "; }')

Operaciones con la base de datos

Te sonará ya que cuando queremos realizar acciones avanzadas de administración de WordPress normalmente tenemos que usar la línea de comandos, y también para esto WP-CLI nos ofrece comandos para hacer queries:

wp db query "SELECT id FROM wp_users;"

Y, por supuesto, también podemos realizar operaciones típicas en la base de de datos como importar, exportar u optimizar:

wp db export
wp db import backup.sql
wp db optimize

El comando export puedes usarlo también dentro de un script o una tarea cron para administrar copias de seguridad programadas de la base de datos.

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'

En este caso, WP-CLI desempaqueta datos JSON, ejecuta la acción de reemplazo y empaqueta de nuevo los datos en la base de datos.

Si quieres ver cuántas operaciones de esta acción de búsqueda hay en tu base de datos antes de ejecutar el comando export puedes ejecutar antes el comando --dry-run:

wp search-replace --dry-run 'dev.example.com' 'www.example.com'

Lo que verás es algo así:

+---------------------+-----------------------+--------------+------+
| Table               | Column                | Replacements | Type |
+---------------------+-----------------------+--------------+------+
| wpcli_options       | option_value          | 2            | PHP  |
| wpcli_posts         | post_content          | 1            | SQL  |
| wpcli_posts         | guid                  | 28           | SQL  |
+---------------------+-----------------------+--------------+------+

Operaciones en WordPress Multisitio

Una gran ventaja de utilizar WP-CLI en particular, y la línea de comandos en general, es la posibilidad de automatizar tareas repetitivas usando scripts. Esto también se aplica a las redes de WordPress Multisitio. De este modo, en vez de visitar el escritorio de cada web para realizar un tarea, puedes simplificar el proceso utilizando algunas líneas de código. Por ejemplo, puedes usar un script como el siguiente para instalar el 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

Si quieres incluso saltarte pasos adicionales a la hora de crear y ejecutar un script, puedes ejecutar el mismo ejemplo de antes con un sencillo comando:

for site in $(wp site list --field=url); do wp plugin install wordpress-importer --url=$site --activate; done

Uso remoto de WP-CLI con SSH

Si ya has instalado WP-CLI en tu servidor remoto, y si tu proveedor de alojamiento lo permite, puedes conectarte vía un terminal SSH y utilizar también comandos WP-CLI. Lo único que necesitas es un cliente SSH y las credenciales del alojamiento para conectarte a tu servidor.

Si utilizas Linux o Mac OS X no tienes que instalar ningún software, ya que puedes hacerlo desde la aplicación Terminal, y si utilizas Windows puedes usar aplicaciones como Putty. Con cualquiera de estas herramientas puedes conectarte a tu servidor mediante SSH con este comando:

ssh [email protected]

A continuación la interfaz de comandos te pedirá la contraseña y, si te conectas correctamente, tendrás una interfaz de comandos para usar las herramientas de WP-CLI en ese alojamiento. Si no estuviese disponible WP-CLI puedes seguir los pasos descritos en el sitio oficial para instalarlo. Cuando termines, de nuevo, puedes comprobar que está instalado correctamente con el comando que hemos visto al principio:

wp cli version

Si todo ha ido bien te mostrará la versión actual.

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 tienes 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"

Unidades de prueba

Las unidades de prueba pueden ser muy beneficiosas para los desarrolladores de plugins. Pueden revelar fallos rápidamente y asegurarte de que una versión nueva de tu software no rompa todo. Sin embargo, crear pruebas es un proceso complicado ya que tienes que configurar PHPUnit, configurar la biblioteca de pruebas de WordPress y los archivos de configuración. Estas últimas dos tareas puedes hacerlas muy fácilmente con WP-CLI y así crear automáticamente los archivos requeridos.

Lo primero de todo es instalar PHPUnit; siguiendo las instrucciones de su web oficial. A continuación WP-CLI entra en acción y te ayudará a crear los archivos necesarios para ejecutar las unidades de prueba PHP con un solo comando:

wp scaffold plugin-tests mi-plugin

Si navegas hasta tu carpeta de plugins verás algunos archivos y carpetas nuevos:

.travis.yml
bin/
phpunit.xml
tests/

Puedes utilizar el archivo install-wp-tests.sh en la carpeta bin para lanzar el entorno de pruebas:

bash bin/install-wp-tests.sh test_database user 'pass' localhost latest

Los parámetros utilizados son estos:

  • test_database
    la base de datos que se usará para insertar los datos de prueba
  • user
    usuario de la base de datos MySQL
  • pass
    contraseña de la base de datos MySQL
  • localhost
    servidor MySQL
  • latest
    la versión de WordPress que estás usando

El comando anterior creará una unidad de prueba de ejemplo que no hace nada, pero que puedes usarla como archivo de partida para crear tu propia prueba. El archivo es tests/test-sample.php y contiene el siguiente código fuente:

class SampleTest extends WP_UnitTestCase {
function test_sample() {
// replace this with some actual testing code
$this->assertTrue( true );
}
}

Con esto ya está todo preparado, y puedes ejecutar tu unidad de prueba para el plugin así:

phpunit

Hay mucho más relacionado con las unidades de prueba pero se escapa al objetivo de este artículo. Si quieres más información la tienes en la web oficial de PHPUnit.

Usos avanzados de WP-Cli

Si has llegado hasta aquí es posible que ya te hayas convencido de que WP-CLI es una potente herramienta para el desarrollador. Pero hay mucho más, pues 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

Crear comandos personalizados usando un plugin

Yendo un paso más allá puedes crear plugins WordPress personalizados que amplíen las funcionalidades por defecto de WP-CLI y así crear tus propios comandos. El archivo de tu plugin debería tener una clase para cada comando y métodos públicos para cada subcomando.

Para ver un ejemplo en acción asumamos que quieres crear un comando que contenta estos tres subcomandos:

  • hola
    toma un nombre como argumento de posición y dice hola
  • adios
    toma un nombre como argumento asociativo y dice adios
  • random
    imprime el título de una entrada aleatoria de WordPress

Crearemos una clase, denominada Mis_comandos, que contenta las tres funciones públicas: holaadios y random. Estas funciones toman dos argumentos: $args, que contiene los argumentos de posición, y $assoc_args, que contiene los argumentos de asociación.

En este ejemplo, el primer subcomando tendría un argumento posicional name,  que sería la entrada para imprimir el hola:

function hola( $args, $assoc_args ) {
list( $name ) = $args;
WP_CLI::success( "Hola, $name!" );
}

El segundo subcomando tendría un argumento asociativo name, que se extraería del array $assoc_args:

function adios( $args, $assoc_args ) {
$name = 'name';
if( $assoc_args[ 'name' ] ) {
$name = $assoc_args[ 'name' ];
}
WP_CLI::success( "Adiós, $name!" );
}

El tercer subcomando no tendría argumentos. Simplemente ejecutaría una petición a la base de datos, recuperando una entrada aleatoria e imprimiría el título:

function random ( $args, $assoc_args ) {
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"
);
WP_CLI::success( "Entrada aleatoria: $random_post" );
}

Para finalizar, tendremos que registrar tu clase como un comando WP-CLI, utilizando una llamada add_command. Esta función toma como argumentos el nombre del comando y el nombre de la clase:

WP_CLI::add_command( 'miscomandos', 'Mis_Comandos' );

Una vez incluido todo el código en un plugin WordPress ya podrías confirmar que tu comando se ha registrado con éxito tecleando lo siguiente:

wp miscomandos

La salida será una lista de los comandos disponibles:

usage: wp miscomandos adios --name=name
or: wp miscomandos hola name
or: wp miscomandos random

Todo estaría ya listo para ejecutar tu primeros comandos personalizados de WP-CLI:

wp miscomandos hola mundo
wp miscomandos adios --name="Jose"
wp miscomandos random

Lo que, respectivamente, mostraría lo siguiente:

Success: Hola, mundo!
Success: Adiós, Jose!
Success: Random post: Este es el título de una entrada

Conclusión

Espero que con este repaso tengas una idea general de las posibilidades de WP-CLI, las cuales son infinitas, no digamos si te animas a ampliar funcionalidades del código y creas tus propios comandos. Por supuesto, hay muchas más herramientas incluidas, no mencionadas en este artículo, que puedes encontrar en la web oficial de WP-CLI.

Y si quieres ampliar conocimientos aquí tienes unos enlaces imprescindibles:

Y también tienes esta chuleta base de comandos de WP-CLI:
chuleta comandos wp-cli wordpress

 

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 22

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

7 comentarios en “WP-CLI La interfaz de comandos de WordPress – Guía de uso”

  1. Andres Thokora

    Hola Fernando.

    Sin duda es una guía completa y muy útil, sin embargo, por más que lo intento instalar en mi servidor no logro ponerlo en marcha…. Mi duda surge allí… ¿Este entorno es para trabajar un Wordpress en modo de desarrollo local? Es decir, ¿sólo funciona en mi computador?

    Poseo un server con RedHat y he logrado configurar todos los servicios que pide WordPress y sus complementos, ha sido todo un reto pero ha sido de mucho aprendizaje, sin embargo no pude con WP-Cli, aún siguiendo tu guía y la oficial.

    ¿Podrías sacarme de la duda? ¡Te lo agradecería!

      1. Andres Thokora

        Mil gracias por responder Fernando, seguiré intentando instalarlo y cuento como me va, ¡Saludos desde Colombia!

Deja un comentario

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

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio