¿Cómo cambiar todos los GUID en la tabla de posts?
Recientemente he transferido mi WordPress desde el servidor de desarrollo al servidor de producción. Me di cuenta de que tengo que cambiar todos los "guid" con la URL del dominio de producción. ¿Hay alguna consulta MySQL o función simple disponible para cambiarlo fácilmente?

Para mejorar las respuestas anteriores, debes actualizar todas las tablas relevantes como (aquí el prefijo de la tabla es wp_):
UPDATE `wp_posts` SET guid = REPLACE(guid, 'oldsiteurl', 'newsiteurl') WHERE guid LIKE 'oldsiteurl%';
UPDATE `wp_postmeta` SET meta_value = REPLACE(meta_value, 'oldsiteurl', 'newsiteurl') WHERE meta_value LIKE 'oldsiteurl%';
UPDATE `wp_options` SET option_value = REPLACE(option_value, 'oldsiteurl', 'newsiteurl') WHERE option_value LIKE 'oldsiteurl%';
Si tienes algún plugin que maneje redirecciones, también deberías cambiar los enlaces permanentes allí:
UPDATE `wp_redirection_404` SET url = REPLACE(url, 'oldsiteurl', 'newsiteurl') WHERE url LIKE 'oldsiteurl%';

Ten mucho cuidado al reemplazar en las tablas wp_postmeta
y wp_options
... muchas veces hay datos serializados almacenados en estas tablas, si el "oldsiteurl" y "newsiteurl" tienen longitudes de cadena diferentes, corromperás estos campos.

Sí @farinspace totalmente correcto, nunca hagas una actualización automática en wp_postmeta y wp_options, necesitarás actualizar esas tablas manualmente y en caso de editar las cadenas serializadas con un editor apropiado https://serializededitor.com/

Utiliza WP-CLI para buscar y reemplazar. El plugin MigrateDB también tiene una función de buscar y reemplazar al exportar para la próxima vez que hagas una migración.

Había olvidado que escribí un generador SQL hace unos años precisamente para esta tarea:
https://farinspace.github.io/wp-migrate-gen/
Esencialmente, el SQL relevante es el siguiente:
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'a', 'b') WHERE `option_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'a', 'b');
UPDATE `wp_posts` SET `post_excerpt` = REPLACE(`post_excerpt`, 'a', 'b');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'a', 'b');
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, 'a', 'b');
UPDATE `wp_comments` SET `comment_content` = REPLACE(`comment_content`, 'a', 'b');
UPDATE `wp_links` SET `link_url` = REPLACE(`link_url`, 'a', 'b');
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_usermeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_termmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_commentmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
Las consultas anteriores verifican y omiten los datos serializados de PHP.
Usando el generador, puedes desactivar "omitir datos serializados" si las longitudes de las cadenas antiguas y nuevas coinciden.
ADVERTENCIA: Recomiendo que siempre crees una copia de seguridad de tus datos antes de ejecutar cualquier consulta que agregue/elimine/actualice contenido.

La documentación de WordPress advierte sobre cambiar las entradas guid en la base de datos de WP: "Es crítico que NO cambies el contenido de este campo."
https://wordpress.org/support/article/changing-the-site-url/#important-guid-note

Pero cuando el dominio anterior era localhost
, la U en GUID realmente no encaja. :)

Bueno, como se menciona en la documentación de WordPress, cuando el GUID es utilizado, por ejemplo, por lectores de feeds para identificar contenido único, aún así no importa qué dominio esté en el GUID. No deberías cambiarlo a menos que quieras que los lectores de feeds evalúen todos los GUIDs cambiados como 'nuevos'. Pero cuando pasas de 'localhost' a algún otro dominio, probablemente los lectores de feeds no sean tu principal preocupación... ;-)

Como mencionaste, hay algunas variables que necesitan ser cambiadas para que puedas actualizar a la nueva URL en tu sitio WordPress.
- Ve y descarga el script de Búsqueda y Reemplazo en Base de Datos de Interconnect IT aquí
- Descomprime el archivo y coloca la carpeta en tu servidor en vivo donde está instalado WordPress (la raíz) y renombra la carpeta a
replace
(captura de pantalla) - Navega a la nueva carpeta que creaste en tu navegador (ej:
http://web.site/replace
) y verás la herramienta de búsqueda/reemplazo - Hasta este punto debería ser bastante intuitivo: ingresa tu antigua URL en el campo
search for…
y la nueva URL en el camporeplace with…
Puedes hacer clic en el botón dry run (prueba en seco) debajo de actions (acciones) para ver qué reemplazará antes de ejecutar el script. Una vez que hayas terminado, asegúrate de eliminar la carpeta /replace/
.

Regularmente migro sitios web de WordPress y esto es lo que uso.
Si alguien está interesado, hago dos búsquedas y reemplazos. La primera ejecución es para reemplazar todos los dominios antiguos por los nuevos. La segunda es para forzar SSL.
- Reemplazar
olddomain.com
connewdomain.com
- Activar expresiones regulares, reemplazar
https?:\/\/([\w-]*\.|)newdomain\.com
conhttps://$1newdomain.com
. Esta expresión regular soportará subdominios.
Como siempre, primero haz una prueba en seco y revisa algunos de los resultados.
