Hoy vamos a ver una forma de cambiar la estructura con la cual WordPress sube los archivos: Quitamos el año y el mes para que las imágenes sean atemporales y no haya siempre una referencia a cuando se subieron. O sea, pasamos de /uploads/2018/04/ a /uploads/.
Dentro de WordPress en AJUSTES / MEDIOS hay una opción llamada «Subida de archivos: Organizar mis archivos subidos en carpetas basadas en mes y año». Si la marcamos, todo el archivo que se suba irá a una carpeta dentro de uploads que tendrá primero el año y luego el mes. Por ejemplo: /uploads/2018/04.
Mientras esté marcada esta opción todos los archivos que se suban se meterán en una carpeta con el año y luego el mes.
Si desactivamos la opción: En principio no pasa nada, aunque todas las imágenes/archivos que subamos a partir de ese momento no estarán dentro de una estructura de carpetas basada en mes y año, sino directamente en /uploads/.
¿Qué hacemos con las imágenes que habíamos subido previamente?
Cómo WordPress no cambia la ruta a una imagen o archivo porque lo guarda en la página, entrada o en el custom post type, tendremos que reemplazar datos en la base de datos.
La forma más sencilla es hacerlo a mano, que no llevará algo de tiempo, pero funciona y no es complicado.
Instalamos y activamos el plugin BETTER SEARCH AND REPLACE.
Y luego nos conectamos por FTP al servidor y miramos el contenido de /wp-content/uploads/
. Vemos cuantos años hay y qué meses contiene cada año. El reemplazo solo habrá que hacerlo para los años y meses que contengan archivos. Los demás nos dan igual.
Descargamos todas las carpetas de años y meses con las imágenes al ordenador. Volvemos a subir todas las imágenes sin la estructura de carpeta directamente en /uploads/
.
Nos vamos a Better Search and Replace y sustituimos en toda la web (o sea, en better search and replace seleccionamos todas las tablas) siempre la carpeta /uploads/ + año + / + mes + /
Por ejemplo para sustituir febrero de 2017, sustituimos: /uploads/2017/12/
por /uploads/
Y luego nos falta sustituir en la tabla postmeta lo mismo: año + / + mes + /
por nada. O sea, dejamos en blanco el campo por el que sustituimos el año y el mes.
Por ejemplo para sustituir febrero de 2017, sustituimos: 2017/12/
por nada.
Este trabajo doble lo tenemos que hacer porque WordPress guarda los metadatos de los archivos subidos sin la carpeta /uploads/ y sin el / inicial dentro del campo meta_value.
Ahora solo nos faltará eliminar la estructura antigua de archivos subidos, eliminando por FTP los años. Como previamente nos habíamos bajado todos los archivos y los habíamos vuelto a subir a /uploads/ sin la estructura de carpetas, no se ha perdido nada y todo funciona correctamente.
Si por alguna de aquellas la habéis liado y en vez de sustituir 2017/12/
por nada, lo habéis sustituido por /
podéis utilizar el siguiente comando en MYSQL para quitar la barra inicial. Si no la quitáis, toda referencia a cualquier archivo de la web será así /uploads//
con una doble barra detrás de uploads. Los navegadores modernos lo suelen obviar, pero siempre es mejor tenerlo todo correcto:
UPDATE `wp_postmeta` SET `meta_value` = SUBSTR(`meta_value`, 2) WHERE `meta_key` = '_wp_attached_file' AND `meta_value` LIKE '/%'
OJO: Si tenéis una estructura de tablas distinta, tenéis que sustituir wp_postmeta
por el nombre que tenga la tabla en vuestro caso.
OJO: Esto se puede hacer de forma más automatizada a través de MYSQL y expresiones regulares, pero la forma más sencilla es esta. Sobre todo para webs que se acaban de montar y solo tienen 2 ó 3 meses de archivos subidos.
Para hacerlo con expresiones regulares, lo más sencillo es:
1) Exportar la tabla WP_POSTMETA (si habéis cambiado el prefijo de WordPress, cambiará «wp_» por lo que hayáis configurado). Y reemplazar (por ejemplo con Notepad++ y la opción de REGEX). Reemplazar:
(\d\d\d\d\/\d\d\/)
por nada. O sea, que busque eso y lo elimine.
2) Exportar todas las tablas de WordPress (lo más sencillo es incluir también WP_POSTMETA). Reemplazar (por ejemplo con Notepad++ y la opción de REGEX):
/uploads/(\d\d\d\d\/\d\d\/)
con:
/uploads/
¡Saludos!
Una consulta, si realizo este cambio, puede que afecte el rendimiento del sitio si tengo muchas imágenes?
gracias.
Muy buenas. ¿Muchas imágenes cuántas son? Nosotros esto lo hemos hecho con webs con más de 100.000 imágenes y no hemos notado ningún problema.