Cambiar la ruta y URL de subida de WordPress

3 abr 2016, 19:31:26
Vistas: 31.5K
Votos: 6

En una instalación nueva, quiero mover la carpeta de subidas a un subdominio (supuestamente para acelerar la descarga). Mi subdominio enlaza a una carpeta llamada static. Entonces tengo:

  • Home
    • wp
      • wp-admin
      • wp-content
      • wp-include
    • static

Ahora necesito decirle a WordPress dónde está la carpeta de subidas y definir su URL. El codex dice que debería editar wp-config para definir UPLOADS relativo a ABSPATH. Pero si pongo define( 'UPLOADS', '../static' ); por supuesto las URLs en las páginas son como //mydomain.tld/wp/../static/image.jpg

He buscado y encontrado muchas respuestas diferentes para esto (filtros, edición de BD,...), algunas de ellas ya no son válidas (desde que la página de configuración de medios ya no permite cambiar la carpeta de subidas) y algunas obviamente incorrectas... Quiero hacerlo de la manera correcta.

Fui a la página wp-admin/options.php y establecí upload_path = ../static y upload_url_path = http://static.mydomain.tld y parece funcionar.

¿Pero es así como se supone que debe hacerse? Y si los desarrolladores han eliminado estas opciones de la página de configuración de medios, ¿no existe el riesgo de que la función se elimine por completo más adelante?

2
Comentarios

Lo que diga el codex es la forma correcta de hacer las cosas. Si eso no se ajusta a tus necesidades, entonces cualquier solución que encuentres es un parche, y no hay parches correctos o incorrectos. Así que si funciona por ahora, quédate con eso y solo estate atento a cambios/actualizaciones.

ed-ta ed-ta
3 abr 2016 19:41:05

Claro, pero esa página del codex solo trata sobre upload_path, no sobre upload_URL. Y esa página solo habla sobre editar wp-config, además de que toda la sección tiene una advertencia "Las siguientes secciones pueden contener información avanzada/no soportada" lo cual me hace dudar.

Mat Mat
3 abr 2016 19:50:34
Todas las respuestas a la pregunta 3
8

Fui a la página wp-admin/options.php y configuré... ¿Pero se supone que debe hacerse así?

No. Nunca deberías modificar nada en los archivos núcleo de WordPress porque todos tus cambios se perderán durante la próxima actualización. Deberías usar actions y filters en su lugar:

add_filter( 'pre_option_upload_path', function( $upload_path ) {
    return '/ruta/a/static';
});

add_filter( 'pre_option_upload_url_path', function( $upload_url_path ) {
    return 'http://static.ejemplo.org';
});
3 abr 2016 19:59:27
Comentarios

No, no, hay un malentendido aquí. Por supuesto que nunca editaría un archivo de WordPress. Me refería a que cargué la página wp-admin/options.php en mi navegador, cambié los ajustes mostrados y hice clic en guardar. Ahora, para tus filtros, entiendo cómo funcionan, pero ¿de dónde se obtienen los valores sin filtro? ¿Hay alguna posibilidad de que sean los ajustes que modifiqué?

Mat Mat
3 abr 2016 20:08:45

Entendido, disculpa por asumir que editaste un archivo core. Esos son exactamente los valores que modificaste y el filtro pre_option_* simplemente filtra todas las llamadas get_option() para esos valores, así que tu enfoque también funcionará. Respecto a futuro, dudo que estas opciones sean eliminadas del core sin proporcionar compatibilidad hacia atrás.

kovshenin kovshenin
3 abr 2016 20:20:16

OK, así que básicamente ambas soluciones son similares en el sentido de que la mía define nuevos valores de opción (asumo que en la base de datos) mientras que la tuya los cambia sobre la marcha, ¿correcto? Entonces supongo que esto, junto con tu comentario sobre futuras evoluciones, significa que mi solución es correcta. Gracias por tu ayuda.

Mat Mat
3 abr 2016 20:31:46

¡De nada! Correcto, pero solo para aclarar, ambos valores ya están definidos en la base de datos, simplemente los estás cambiando desde la interfaz de usuario de options.php. Yo tampoco usaría rutas relativas porque a veces son impredecibles.

kovshenin kovshenin
3 abr 2016 20:38:16

Acabo de verificar en otras dos instalaciones que tengo. Tanto upload_path como upload_url_path existen en la base de datos pero están vacíos, así que asumo que hay un valor predeterminado definido en algún lugar. En cuanto a la ruta relativa, eso fue debido a la sugerencia del codex que mencioné en mi publicación inicial. Configuraré una ruta absoluta entonces, con suerte eso no romperá mi sitio :-)

Mat Mat
3 abr 2016 20:46:43

Tienes razón, con valores vacíos los valores predeterminados se generan en wp_upload_dir: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/functions.php#L1816

kovshenin kovshenin
3 abr 2016 20:49:34

No funciona en WP 4.7.2

Jeremy Jeremy
8 mar 2017 19:50:07

Acabo de votar a favor del comentario de @kovshenin sobre la ruta relativa. Verifiqué los valores con add_filter('upload_dir', function( $args ){ var_dump($args); });, los resultados incluyen algo extraño como /home/foo/bar/wordpress/../uploads/. Así que usé una ruta absoluta para el campo upload_path en la página option.php.

norixxx norixxx
26 oct 2018 12:16:55
Mostrar los 3 comentarios restantes
0

Tuve un problema similar al mapear los medios de un subdominio. Preguntado y respondido aquí.
En resumen, agrega a functions.php lo siguiente:

update_option('upload_url_path', '/wp-content/uploads');
20 dic 2018 10:06:57
0

Si, por cualquier razón, no deseas configurar las opciones de ruta de carga en la base de datos o en tu archivo functions.php, aún puedes establecer los filtros de opción en tu wp-config.php de la siguiente manera (antes de llamar a cualquier archivo núcleo de WordPress):

$GLOBALS['wp_filter']['pre_option_upload_path'][10][] = array(
  'function' => function( $upload_path ){
    return '/ruta/a/static';
  },
  'accepted_args' => 1,
);

$GLOBALS['wp_filter']['pre_option_upload_url_path'][10][] = array(
  'function' => function( $upload_url_path ){
    return 'http://static.ejemplo.org';
  },
  'accepted_args' => 1,
);

WP_Hook::build_preinitialized_hooks actualizará correctamente estos elementos del array al formato interno realmente utilizado.

26 mar 2020 13:41:11