Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

Buscar y reemplazar en la base de datos de WordPress sin romper nada

Hay momentos en que necesitas cambiar un texto en toda la base de datos de WordPress: cambiaste de dominio, pasaste de http a https, moviste el sitio de una carpeta de prueba a la definitiva, o cambiaste el correo de contacto que aparece en mil lugares.

La tentación es abrir phpMyAdmin y lanzar un UPDATE ... REPLACE(...). Es la forma más rápida de romper widgets, menús y ajustes de plugins sin darte cuenta hasta días después.

Por qué el SQL directo rompe cosas: los datos serializados

WordPress y sus plugins guardan muchos ajustes como datos serializados: un formato de PHP que, junto a cada texto, anota cuántos caracteres tiene. Por ejemplo:

s:22:"http://tudominio.cl/ok";

Ese 22 es el largo exacto del texto. Si reemplazas http:// por https:// con SQL, el texto pasa a tener 23 caracteres pero el número sigue diciendo 22. PHP ya no puede leer ese dato y el plugin o el widget lo trata como vacío: pierdes la configuración.

Las herramientas de esta guía entienden la serialización: leen cada dato, hacen el reemplazo y vuelven a calcular los largos. Por eso son seguras.

Método 1: WP-CLI (el recomendado)

Si tienes acceso SSH o la Terminal de cPanel, WP-CLI tiene el comando search-replace, que es rápido incluso en bases de datos grandes.

cd ~/public_html

# 1. Respaldo, siempre
wp db export antes-del-reemplazo.sql

# 2. Simulación: dice cuántos cambios haría, sin tocar nada
wp search-replace 'http://tudominio.cl' 'https://tudominio.cl' --all-tables-with-prefix --skip-columns=guid --dry-run

# 3. Si la simulación se ve bien, ahora de verdad
wp search-replace 'http://tudominio.cl' 'https://tudominio.cl' --all-tables-with-prefix --skip-columns=guid --report-changed-only

# 4. Vaciar cachés
wp cache flush

Qué hace cada opción:

  • --all-tables-with-prefix: incluye las tablas de plugins que usan tu prefijo (por ejemplo, las de WooCommerce o de un plugin de formularios), no solo las de WordPress.
  • --skip-columns=guid: no toca la columna guid, que identifica cada entrada en los feeds y no debe cambiar después de publicar.
  • --dry-run: simula. Úsalo siempre primero.
  • --report-changed-only: en el resumen final, muestra solo las tablas donde hubo cambios.

La trampa: URLs escapadas

El editor de bloques y muchos constructores visuales guardan parte de sus datos en formato JSON, donde las barras van escapadas: https:\/\/tudominio.cl en lugar de https://tudominio.cl. Un reemplazo normal no las encuentra.

Después del reemplazo principal, busca si quedan:

wp db search 'http:\/\/tudominio.cl' --all-tables-with-prefix --stats

Si aparecen, haz un segundo reemplazo con la versión escapada:

wp search-replace 'http:\/\/tudominio.cl' 'https:\/\/tudominio.cl' --all-tables-with-prefix --skip-columns=guid --dry-run

Y repite sin --dry-run si la simulación encuentra lo esperado.

Cuidado con los reemplazos cortos. Reemplazar tudominio por nuevodominio sin el https:// puede cambiar también correos ([email protected]), nombres de archivo o textos que no querías tocar. Usa siempre la dirección completa, con el protocolo.

Método 2: un plugin (sin terminal)

Si no tienes SSH, el plugin gratuito Better Search Replace hace lo mismo desde el escritorio:

  1. Haz un respaldo de la base de datos.
  2. Ve a Herramientas → Better Search Replace.
  3. Escribe el texto a buscar y el nuevo, y selecciona todas las tablas.
  4. Deja marcada la opción Ejecutar en modo de prueba (dry run) y pulsa Ejecutar.
  5. Revisa el resultado; si está bien, desmarca la prueba y ejecuta de nuevo.
  6. Cuando termines, desactiva y borra el plugin: no conviene dejar una herramienta así disponible en el escritorio.

Nivel pro: migrar sin tocar el sitio en vivo

Si vas a mover un sitio a otro dominio, puedes generar un archivo SQL ya reemplazado sin modificar la base de datos original:

wp search-replace 'https://prueba.tudominio.cl' 'https://tudominio.cl' --all-tables-with-prefix --skip-columns=guid --export=migracion.sql

El sitio de prueba queda intacto y en migracion.sql tienes la base lista para importar en el sitio definitivo con wp db import migracion.sql.

Después del reemplazo

  • Vacía la caché del plugin de caché, de Cloudflare y del hosting.
  • Si cambiaste el dominio, entra a Ajustes → Enlaces permanentes y pulsa Guardar para regenerar las reglas.
  • Si usas un constructor visual, busca en sus herramientas una opción tipo «Regenerar CSS» o «Reemplazar URL»: algunos guardan archivos CSS con las direcciones antiguas.
  • Revisa algunas páginas, los menús, los widgets y los formularios.

¿La simulación te da un número de cambios que no esperabas? Comparte en el foro el comando que usaste y el resumen (sin datos privados) y lo revisamos antes de ejecutarlo de verdad.