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 agregar el generador de contraseña fuerte de WordPress en nuestro formulario de registro personalizado
Cómo agregar el generador de contraseña fuerte de WordPress en nuestro formulario de registro personalizado
En la entrada anterior veíamos cómo crear un formulario de registro personalizado en WordPress. En el ejemplo, generábamos una contraseña automáticamente, pero ahora vamos a…
Oculta las notificaciones de plugins y temas en WordPress
Oculta las notificaciones de plugins y temas en WordPress
Es posible que te hayas encontrado alguna vez o tengas un sitio creado con WordPress que tenga multitud de plugins instalados, o algún cliente que…
WP-CLI Parte 4, trabajando con usuarios
WP-CLI Parte 4, trabajando con usuarios
1. Instalación y primeros pasos 2. Instalando WordPress y primeros pasos y configuraciones 3. Trabajando con posts 4. Trabajando con usuarios 5. Trabajando con la…
Cómo añadir nuestras propias opciones multi-idioma en el personalizador de WordPress
Cómo añadir nuestras propias opciones multi-idioma en el personalizador de WordPress
En la entrada anterior veíamos cómo agregar nuestras propias opciones en el personalizador de WordPress. En ésta entrada vamos a ver cómo podríamos organizarlas por…