¿Cómo actualizar los enlaces de medios en WordPress después de una migración?
Migré mi sitio WordPress a un nuevo hosting y nueva URL. He realizado todos los típicos búsqueda y reemplazo en mysql y el sitio funciona perfectamente.
Sin embargo, a los enlaces de mis imágenes les falta .co.uk
, por lo que no funcionan.
Lo extraño es que todas las URLs de las imágenes son correctas en el código fuente de los blogs. Pero en mi biblioteca de medios, a todas les falta .co.uk.
¿Cómo puedo agregar .co.uk de vuelta en las URLs de mi biblioteca de medios?
Como se mencionó en los comentarios bajo tu pregunta, algunos datos en la base de datos de WordPress están serializados y por lo tanto no es posible cambiarlos con un simple buscar y reemplazar.
Deberías leer la sección Mover WordPress del codex. Específicamente la parte de Cambiar tu nombre de dominio y URLs. Normalmente uso un plugin o una herramienta de línea de comandos dependiendo de lo que tenga disponible.
Plugin:
Better Search Replace es un plugin útil recomendado en la entrada anterior. Hay otros plugins que harán lo mismo pero esta es mi preferencia. Algunas características que me gustan son:
- Soporte para datos serializados.
- La capacidad de seleccionar una o múltiples tablas.
- Una función de "prueba seca" para probar y verificar tus cambios antes de realizarlos.
- Muy pocos requisitos del servidor (todo lo que necesitas es una instancia de WP).
Herramienta CLI:
Otra opción que maneja datos serializados es la herramienta search-replace de WP-CLI. Esta opción se usa desde la línea de comandos vía algo como SSH y requiere que wp-cli esté instalado en el servidor. Puedes echar un vistazo a la documentación para todas las opciones y ejemplos disponibles pero el uso básico es:
# Buscar el nombre de dominio antiguo y reemplazarlo con el nuevo
$ wp search-replace 'http://old.example.dev' 'http://new.example.com'

Si crees que esta respuesta debería recibir un voto negativo, por favor deja un comentario aquí explicando por qué para que pueda actualizarla o eliminarla. Creo que esta respuesta es válida pero estoy abierto a críticas. ¡Gracias! :-)

No entiendo por qué esto recibió un voto negativo. Yo le di un voto positivo. Better Search and Replace es excelente para datos serializados como widgets, meta boxes personalizados y esta situación.

Gracias Christina, creo que el voto negativo se debió a que la recomendación del plugin era la única sugerencia. Eso es comprensible, generalmente no me gustan las respuestas que solo recomiendan plugins, pero en este caso sentí que estaba justificado. De cualquier manera, actualicé mi respuesta para incluir una referencia al artículo del Codex que lo sugiere. ¡Espero que ayude a alguien!

Better Search Replace es un excelente plugin y lo uso todo el tiempo. Puede que haya recibido un voto negativo porque, para que BSR reemplace la URL de Medios, es necesario marcar "Reemplazar GUIDs" que no está marcado por defecto. No me funcionaba hasta que miré la tabla y vi que la URL está almacenada en el campo GUID.

Este es un problema bastante común, así que creo que merece una respuesta exhaustiva que cubra la situación que probablemente la mayoría está buscando en Google cuando encuentran esto.
Para el problema específico de Montrealist
Para la pregunta específica, parece que @montrealist ejecutó incorrectamente un proceso de buscar/reemplazar en la base de datos en algún momento. Veo que la URL para los medios es:
http://www.cosworth-europe/sam/wp-content/...
Supongo que debería ser:
http://www.cosworth-europe.co.uk/sam/wp-content/...
En algún momento, perdiste el TLD del host, así que ese es el primer aspecto que valdría la pena revisar aquí. Podrías volver a ejecutar un buscar y reemplazar con algo como esto:
- Buscar:
//www.cosworth-europe/
- Reemplazar:
//www.cosworth-europe.co.uk/
Esto debería corregir el problema específico que veo aquí, asumiendo que mis suposiciones son correctas.
Para aquellos que buscan en Google problemas similares
WordPress almacena muchas referencias a URL dentro de su base de datos. No hay una única configuración de origen para el host de un sitio, por lo que necesitarás ejecutar un proceso de buscar/reemplazar en la base de datos para solucionar esto. Dependiendo de dónde se utilicen esas imágenes, es posible que también necesites asegurarte de que las cadenas serializadas se reemplacen correctamente.
Para la mayoría de los casos, recomendaría esto como la mejor solución:
- Instala el plugin Better Search Replace
- Busca y reemplaza tu dominio excluyendo el protocolo, así que busca
//www.olddomain.com
con//www.newdomain.com
- Prueba y confirma que no hay problemas, luego desinstala y elimina el plugin
Normalmente no recomiendo plugins como soluciones, yo mismo codifico casi todo de forma mínima, pero para este caso específico, personalmente usaría el plugin WP Migrate DB Pro para esto y otras transferencias relacionadas con la base de datos. El plugin Better Search and Replace es desarrollado por la misma empresa, Delicious Brains, y proporciona exactamente el mismo proceso de buscar y reemplazar. Es una gran opción para resolver este problema a fondo.
Si encuentras problemas y no puedes iniciar sesión en WordPress, puedes acceder por (S)FTP al directorio de tu instalación y establecer o actualizar las siguientes constantes en tu archivo wp-config.php
:
define( 'WP_HOME', 'https://www.example.com' );
define( 'WP_SITEURL', 'https://www.example.com' );
Esto solo debería hacerse temporalmente, una vez que corrijas el problema en la base de datos, es mejor eliminar esto de tu archivo wp-config.php
después.

Vine a buscar esto - probé este plugin y también Velvet Blues Update URL - ninguno funcionó. Entonces me di cuenta, ¿por qué diablos no estoy simplemente actualizando esto vía MySQL?
Primero, actualiza tu tabla wp_posts. Luego tu SQL se vería así:
UPDATE `wp_posts` SET post_content = REPLACE(post_content, 'oldurl', 'newurl') WHERE post_content like "%oldurl%"

Deberías usar el plugin WP all in one migration para migrar el sitio web. https://wordpress.org/plugins/all-in-one-wp-migration/
