Qué consulta SQL para hacer una simple búsqueda y reemplazo

20

Cada vez que creo un nuevo sitio web, primero creo un sitio provisional en un subdominio como "stage.domain-name.com".

Después de que todo funciona correctamente, exporto la base de datos, la abro en notepad ++ y hago una búsqueda / reemplazo para "subdominio.domain-name.com" y la reemplazo con "domain-name.com" ... finalmente la importo a una nueva base de datos para el sitio en vivo.

Mi pregunta es ... ¿qué consulta SQL necesitaría ejecutar si solo quisiera hacer esta simple búsqueda / reemplazo en toda la base de datos usando phpmyadmin?

-CH

NetConstructor.com
fuente
Si no está familiarizado con las consultas, pruebe el complemento Buscar y reemplazar, wordpress.org/extend/plugins/search-and-replace
t31os
¿Por qué no usar la funcionalidad de WordPress para actualizar la URL? codex.wordpress.org/Moving_WordPress detalla todo
Alex Older
Hay un complemento para esto. Permite un uso cómodo del backend y también reemplaza la URL en el contenido posterior y algunos otros campos, si desea: wordpress.org/plugins/better-search-replace
simonthesorcerer

Respuestas:

13

La tabla donde se guarda su URL es wp_options. Debe hacer una actualización en las columnas que usan la URL de su sitio:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Puede que me falte algún valor, pero cada vez que realice este proceso de búsqueda / reemplazo nuevamente, puede observar los valores y las tablas que deben actualizarse y agregarlos a este script.

WordPress Codex tiene una buena guía sobre cómo cambiar la URL de un sitio, tal vez eso sea aún más útil para usted: Cambiar la URL del sitio

Fernando Briano
fuente
1
¿No hay una manera de hacer una búsqueda / reemplazo en toda la base de datos? En otras palabras ... Noté, por ejemplo, que necesito reemplazar las URL en un montón de ubicaciones diferentes, incluida la biblioteca de medios ... Si hubiera una búsqueda / reemplazo para toda la base de datos esencialmente para cada campo, esto resolvería el problema. Gracias por su ayuda
NetConstructor.com
Mira el nuevo enlace que agregué en la respuesta. Creo que ese sería el camino a seguir.
Fernando Briano el
1
Esto no funcionará para datos serializados. Podría romper por completo alguna configuración del tema.
Christian Lescuyer
29

Las mejores opciones para hacer, publicaciones, contenido de publicaciones y meta meta:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Consulte también Búsqueda de datos con phpMyAdmin y MySQL | Packt Publishing. Y Search RegEx es un buen complemento de WP para poder buscar y reemplazar con Grep en todas las publicaciones y páginas.

Actualización 16/06/2015: Usar la herramienta vinculada en la siguiente oración es mucho mejor, ya que una simple búsqueda / reemplazo como se indicó anteriormente en un volcado de la base de datos romperá los datos serializados. Ver Interconnectit.com WordPress Serialized PHP Search Reemplazar herramienta. De esta manera, no rompe los datos serializados y no necesitará ejecutar RegEx en el contenido de la publicación, ya que el script de interconexión cambia las URL en todas partes. Uso esa herramienta todo el tiempo para migrar sitios a diferentes dominios, o simplemente para hacer un cambio global de http a https para forzar SSL sin complementos y cambiar todas las URL en el contenido para evitar errores de elementos inseguros.

markratledge
fuente
2
Nunca cambies el guid, incluso si vas a un nuevo dominio. Se utiliza para identificar de forma exclusiva la publicación, ya que la identificación puede cambiar si las publicaciones se exportan / importan a una nueva base de datos. Por un lado, los lectores RSS usarán el GUID para saber si un artículo en particular ha sido leído o no. Cambiar el guid volverá a publicar efectivamente todos sus artículos.
Taylor Dewey
@taylordewey dijo: "Nunca cambies la guía ..." Basura.
markratledge
1
@songdogtech Cuidado para explicar por qué es basura?
shea
1
¿Por qué uno tiene que cambiar el GUID?
Kaiser
1
Esto no funcionará para datos serializados. Podría romper por completo alguna configuración del tema. De hecho, use una herramienta como Interconnect / IT.
Christian Lescuyer
9

Este es un gran script que utilizo y funciona muy bien con los arreglos serializados que WP usa para almacenar opciones. Solo asegúrate de eliminarlo de tu servidor remoto cuando termines porque es un GRAN riesgo de seguridad.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

lancemonotona
fuente
2
No sé por qué tenía -1. Este script es mucho mejor que una declaración SQL. Comentarios por favor?
lancemonotone
1
una herramienta que las personas que no conocen sql pueden usar, molesta a quienes escriben en sql
Jon
4

Para esto utilizo WP-CLI porque me parece más fácil y se encarga de los datos serializados.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

También hay una opción que escribe sus cambios en un archivo SQL en lugar de manipular la base de datos real:

wp search-replace foo bar --export=database.sql

Jan Beck
fuente
Con mucho, la solución más robusta y rápida. wp-cli salva el día una vez más
ryanrain 19/0618
3

no tiene que hacer esto, puede usar rutas relativas.

cuando está vinculando algo en lugar de subdominio.soemthing.com/image.jpg - use /image.jpg por ejemplo

de esta manera no enfrentarás el problema en primer lugar.

de lo contrario, para una declaración de actualización de mysql puede usar

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);
mireille raad
fuente
Gracias ... sí, lo haré la próxima vez. La instrucción SQL hace un reemplazo de búsqueda en toda la base de datos (incluidas todas las tablas)?
NetConstructor.com
@ NetConstructor.com La declaración SQL que Mireille le dio arriba es el comando genérico MySQL para reemplazar una cadena en un campo específico en una tabla específica. Si intentara ejecutar esta declaración exactamente como fue escrita, no funcionaría. Para que este comando funcione, deberá cambiar TABLE_NAME y FIELD_NAME a un campo y una tabla reales utilizados por WordPress.
Manzabar
Tenga en cuenta también que, incluso si desea utilizar rutas relativas, muchas partes de WordPress tienden a insertar automáticamente rutas completas. Para que esto funcione realmente, un complemento como: wordpress.org/plugins/root-relative-urls es muy, muy útil
Benz001
2

Para cambiar el dominio de wordpress lo que a menudo necesitamos, puede ser hacer que el sitio viva desde localhost: Esta es una lista completa de consultas de actualización:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • También tenemos que agregar otras tablas que no son predeterminadas con WP si es necesario.

ACTUALIZACIÓN: Search Replace DB versión 3.1.0 es una herramienta front-end fácil de usar para desarrolladores, que le permite llevar a cabo acciones de búsqueda / reemplazo en toda la base de datos, que no dañan cadenas u objetos serializados PHP.

Reza Mamun
fuente
2
Esto no funcionará para datos serializados. Podría romper completamente la configuración del tema.
Christian Lescuyer
-1

En realidad, no tiene que usar una consulta SQL, solo algunos ajustes en el archivo wp_config y functions.php en su tema. Consulte este tema en Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL

MEDZ
fuente
1
Esto no es correcto WordPress desafortunadamente almacena alguna URL en la base de datos como texto.
s_ha_dum