Blog sobre desarrollo WordPress en Español Desarrollo WordPress en Español
WP-CLI

WP-CLI Parte 6, search replace, un comando imprescindible

 

Llegamos a la sexta entrada en la serie de WP-CLI. Esta vez para hablar sobre el comando wp search-replace, bajo mi punto de vista uno de los más útiles y que personalmente uso más a menudo.

Éste comando se utiliza para buscar una cadena en base de datos y reemplazarla por otra. Muy útil cuando por ejemplo tienes que realizar una migración de dominio, o modificar el nombre de un post_type.

Su uso es muy sencillo, pero hay que extremar la precaución cuando vayamos a ejecutar este comando. Es muy fácil cometer un error y podemos echar nuestra web abajo. Por lo tanto, antes de hacer cualquier modificación es recomendable hacer una copia de seguridad de la base de datos.

Además, wp search-replace interpreta los datos serializados, y hace los reemplazos de manera inteligente, sin romper nada.

Éste comando acepta los siguientes parámetros:

  • <old>, la cadena que vamos a buscar en la base de datos.
  • <new>, la cadena que va a reemplazar a la cadena <old> que estamos buscando.
  • [<table>…], lista de tablas sobre las que restringir los reemplazos. Soporta Wildcards, ejemplo: ‘wp_*options’ or ‘wp_post*’.
  • [--dry-run], ejecuta el comando, pero simplemente muestra en pantalla el resultado, sin guardar los cambios en base de datos. Es importante la primera vez siempre ejecutar este comando en modo dry run, para evaluar los cambios antes de que se produzcan.
  • [--network], hace la búsqueda y reemplazo en todas las tablas registradas en $wpdb en instalaciones multisite.
  • [--all-tables-with-prefix], habilita la búsqueda y reemplazo en todas las tables con el prefijo, incluso aunque no estén registradas en $wpdb.
  • [--all-tables], habilita la búsqueda y reemplazo en todas las tablas de la base de datos, incluso aunque no estén registradas en $wpdb.
  • [--export[=<file>]], escribe los datos transformados a un archivo SQL en lugar de guardar los reemplazos en la base de datos.
  • [--export_insert_size=<rows>], para definir el número de filas en una sola instrucción INSERT al realizar la exportación de SQL. Por defecto 50.
  • [--skip-columns=<columns>], para no realizar la búsqueda y reemplazo en columnas específicas. Se pueden establecer múltiples columnas separadas por coma.
  • [--include-columns=<columns>], para realizar la búsqueda y reemplazo en columnas específicas. Se pueden establecer múltiples columnas separadas por coma.
  • [--precise], fuerza el uso de PHP en lugar de SQL, que es más completo pero más lento
  • [--verbose], va imprimiendo en caliente las filas de las tablas que está chequeando el script.
  • [--regex], para lanzar la búsqueda utilizando una expresión regular con delimitadores. Si se utiliza una expresión regular el tiempo de ejecución del script puede multiplicarse por 15 ó 20.
  • [--regex-flags=<regex-flags>], para establecer modificadores en la expresión regular, por ejemplo “i”, para insensibilidad a mayúsculas y minúsculas.
  • [--format=<format>], para imprimir la salida en un formato particular: table (por defecto), count (únicamente el número de reemplazos)

 

El ejemplo más típico es el de hacer una migración de dominio. Ya sea una migración real, o un cambio de http a https, o simplemente estamos instalando un proyecto en local y queremos cambiar el nombre de dominio para identificarlo mejor:

Al hacer un dry-run, simplemente nos mostrará en pantalla dónde ha encontrado coincidencias y el número de las mismas, pero sin efectuar cambio alguno en base de datos. Para que tenga efecto, simplemente tendremos que ejecutar el mismo comando pero quitando --dry-run.

Puedes localizar la búsqueda y reemplazo de cadenas en determinadas tablas de la base de datos. Por ejemplo, si sabes que el reemplazo sólo lo quieres hacer en la información de tus usuarios, puedes lanzar el comando wp search-replace indicando las tablas wp_users y wp_usermeta:

wp search replace

Antes mencionaba lo sencillo que es utilizar este comando. La probabilidad de romper algo es directamente proporcional a su facilidad de uso. Por esta razón es mejor pensar dos veces, y ejecutar una.

Ten en cuenta que una cadena concreta puede ser parte de una cadena más grande, y se efectuaría el reemplazo igualmente. O si vas a cambiar el nombre de un post_type, por ejemplo producto por articulo, ten en cuenta que si en una entrada utilizas la palabra producto, será reemplazada por artículo. O si tienes un enlace a una URL del tipo https://otrodominio.com/producto.html, será reemplazada por http://otrodominio.com/articulo.html y se romperá el enlace.

Keep Calm & search replace

 

Puede que también te interese

Cómo solucionar el error al establecer una conexión con la base de datos en WordPress
Cómo solucionar el error al establecer una conexión con la base de datos en WordPress
En alguna ocasión podemos obtener en pantalla el mensaje de Error al establecer una conexión con la base de datos. Este mensaje es bastante explícito…
Shortcuts o atajos del teclado en el editor de WordPress
Shortcuts o atajos del teclado en el editor de WordPress
El editor WYSIWYG (What You See Is What You Get – lo que ves es lo que obtienes) de WordPress te permite usar Shortcuts o…
Creando un plugin para WordPress parte 5: Subida al Repositorio
Creando un plugin para WordPress parte 5: Subida al Repositorio
1. Creando un plugin para WordPress: Planificación y planteamiento 2. Creando un plugin para WordPress: Estilo del Código 3. Creando un plugin para WordPress: Escribiendo…
Cómo agregar un campo personalizado debajo del título de una entrada
Cómo agregar un campo personalizado debajo del título de una entrada
En ocasiones puede resultar útil agregar un campo personalizado adicional justo debajo del título de una entrada o página, por cuestiones de usabilidad y experiencia…