Tengo una tabla llamada “wp-posts” con un campo “post-content”. Este campo contiene el texto de las publicaciones de blog. Me gustaría cambiar todos los registros para reemplazar una URL por otra.
Imagina que puedo tener cosas como:
Esta es una prueba y en algún lugar hay algo como
oldurl.com/algo”>un enlace.”
quiero que sea
Esta es una prueba y en algún lugar hay algo como
nuevaurl.com/algo”>un enlace.”
Necesito poder cambiar esto para cada registro en mi tabla sin tener que abrir cada publicación en WordPress y cambiarlas a mano. tiene que haber una manera de hacer esto
Esto se puede lograr fácilmente con una declaración SQL simple usando MySQL’s replace()
función. Antes de hacer eso, definitivamente debe hacer un volcado de la base de datos o lo que sea que use para las copias de seguridad. No es solo que es The Right Thing To Do™, sino que si comete un error en su sustitución, puede resultar difícil deshacerlo (sí, puede retroceder, pero es posible que solo descubra su error más adelante).
Para crear un volcado de base de datos desde MySQL, puede ejecutar algo como esto:
mysqldump -h hostname -u username -p databasename > my_sql_dump.sql
Dónde (y probablemente lo sepa, pero en aras de la exhaustividad para las generaciones futuras…) —
- nombre de host es un marcador de posición para el nombre de host de la base de datos. Si el servidor de la base de datos se está ejecutando en su propia máquina, entonces puede usar “localhost” o simplemente dejar el “-h nombre de host” por completo.
- nombre de usuario es un marcador de posición para el usuario con permiso para ejecutar un volcado en la base de datos. Suele ser un administrador, pero si se trata de una base de datos compartida, podría ser simplemente usted.
- nombre de la base de datos es el nombre de toda la base de datos que contiene sus tablas. (Tenga en cuenta que “-p” no tiene nada que ver con el nombre de esta base de datos. “-p” indica que MySQL debe solicitarle una contraseña para iniciar sesión).
Ahora que lo solucionamos, puede iniciar sesión en la base de datos MySQL usando:
mysql -h hostname -u username -p databasename
Y simplemente ejecute esta declaración:
UPDATE `wp-posts` SET `post-content` = REPLACE(`post-content`, "http://oldurl.com", "http://newurl.com");
¡Y eso debería hacerlo!
Si comete un error, a menudo puede volver a ejecutar la declaración con el texto original y el nuevo invertidos (si el texto nuevo, en su caso, la nueva URL, no existía en el texto antes de que hiciera el reemplazo). A veces esto no es posible dependiendo de cuál sea el texto nuevo (nuevamente, no es probable en su caso). De todos modos, siempre puede intentar recuperar el volcado de sql:
cat my_sql_dump.sql | mysql -h hostname -u username -p databasename
Y voila.
Utilizar el reemplazar función de cadena en MySQL:
UPDATE MyTable SET textfield = REPLACE(textfield, "http://oldurl.com/", "http://newurl.com")
Hay un práctico complemento de WordPress que he usado para buscar y reemplazar en las páginas de publicaciones con grep:
http://urbangiraffe.com/plugins/search-regex/
recientemente usé http://wordpress.org/extend/plugins/buscar-y-reemplazar/ para actualizar un sitio desde un servidor de desarrollo al servidor público. Usé el complemento para cambiar todas las URL de las imágenes de su formato “00.00.00.00/~user/” a su formato “example.com”.
Funcionó perfectamente.
Por supuesto, asegúrese de hacer una copia de seguridad de la base de datos primero en caso de que cometa un error tipográfico durante el proceso.
Hay algunos lugares para resolver eso.
- Copia de seguridad de su base de datos
- Intenta usar la utilidad interna de WordPress
- Buscar coincidencias
- Escriba su propia búsqueda y reemplazo
Procedimiento
1. Haz una copia de seguridad de tu base de datos
Generalmente voy así:
mysqldump -u dbuser -p'dbpassword' --complete-insert --default-character-set=utf8 databasename > /home/renoirb/backups/databasename.sql
Incluso tengo esto en un crontab en mi propio servidor. Pero ese es otro tema.
2. Intenta usar la utilidad interna de WordPress
WordPress tiene su propia utilidad para el caso. La mayoría de las veces, solo se puede hacer con él.
Simplemente agregue a su tema functions.php
(ver la documentación de wordpress) archivar la siguiente línea:
update_option('siteurl','http://local.workspace/');
update_option('home','http://local.workspace/');
Suponiendo que ya está ejecutando el tema que tiene ese particular functions.php
expediente.
Ejecute el sitio, actualizando la página.
Luego, ¡comenta las líneas!
Ya no los necesitarás.
De lo contrario, pueden actualizar la configuración de su base de datos en cada carga de página.
Si no es suficiente, continúa…
3. Buscar coincidencias
Yo personalmente uso Administrador en mi implementación, es un reemplazo ligero de un archivo para PHPMyAdmin.
por qué sugiero Administrador? Tiene una buena función de búsqueda en todas las bases de datos que encuentro bastante útil en nuestro caso de uso.
Es un cuadro de búsqueda, etiquetado: “Buscar en tablas de datos”.
4. Escriba su propia búsqueda y reemplace
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, "http://url", "https://url");
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, "http://url", "https://url");
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, "http://url", "https://url");
Tenga en cuenta que, en mi caso, estaba migrando TODAS mis URL de NO HTTPS a HTTPS.
Espero que haya sido útil