Cambiar estructura de archivos subidos en WordPress quitando mes y año

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/.

Cambiar estructura de archivos subidos en WordPress quitando mes y año

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.

Organizar mis archivos subidos en carpetas basadas en mes y año

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!

2 comentarios en “Cambiar estructura de archivos subidos en WordPress quitando mes y año

  1. enlaptop.com

    Una consulta, si realizo este cambio, puede que afecte el rendimiento del sitio si tengo muchas imágenes?

    gracias.

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Los comentarios de esta página se procesan por un sistema automático de moderación por lo cual no siempre se publican de forma instantánea. Por favor respeta a los demás y ciñete al tema del post. Nos reservamos el derecho de eliminar cualquier comentario o enlace que nos parezca inadecuado o tenga una expresión de grosería, insulto, odio, hostilidad o negatividad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.