Modificare il percorso e l'URL di upload di WordPress

3 apr 2016, 19:31:26
Visualizzazioni: 31.5K
Voti: 6

In una nuova installazione, voglio spostare la cartella di upload su un sottodominio (dovrebbe velocizzare il download). Il mio sottodominio punta a una cartella chiamata static. Quindi ho:

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

Ora devo dire a WordPress dove si trova la cartella di upload e definire il suo URL. Il codex dice che dovrei modificare wp-config per definire UPLOADS relativamente ad ABSPATH. Ma se inserisco define( 'UPLOADS', '../static' ); ovviamente gli URL nelle pagine saranno come //mydomain.tld/wp/../static/image.jpg

Ho cercato in giro e ho trovato molte risposte diverse a questo problema (filtri, modifica del DB,...), alcune non più valide (da quando la pagina delle impostazioni media non permette più di cambiare la cartella di upload) e alcune chiaramente sbagliate... Voglio farlo nel modo corretto.

Sono andato nella pagina wp-admin/options.php e ho impostato upload_path = ../static e upload_url_path = http://static.mydomain.tld e sembra funzionare.

Ma è questo il modo in cui dovrebbe essere fatto? E se gli sviluppatori hanno rimosso queste opzioni dalla pagina delle impostazioni media, non c'è il rischio che la funzionalità venga completamente rimossa in futuro?

2
Commenti

Qualunque cosa dica il codex è il modo corretto di fare le cose. Se questo non soddisfa le tue esigenze, allora qualsiasi soluzione tu possa trovare è un workaround, e non ci sono workaround giusti o sbagliati. Quindi se per ora funziona per te, tienilo e controlla solo eventuali cambiamenti/aggiornamenti.

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

Certo, ma quella pagina del codex riguarda solo upload_path, non upload_URL. Inoltre quella pagina parla solo di modificare wp-config, e l'intera sezione ha un disclaimer "Le sezioni seguenti potrebbero contenere informazioni avanzate/non supportate" il che mi fa dubitare.

Mat Mat
3 apr 2016 19:50:34
Tutte le risposte alla domanda 3
8

Sono andato nella pagina wp-admin/options.php e ho impostato... Ma è così che si dovrebbe fare?

No. Non dovresti mai modificare nulla nei file core di WordPress perché tutte le tue modifiche andranno perse durante il prossimo aggiornamento. Dovresti invece utilizzare azioni e filtri:

add_filter( 'pre_option_upload_path', function( $upload_path ) {
    return '/percorso/della/cartella/static';
});

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

No, no, c'è un malinteso qui. Ovviamente non modificherei mai un file di WordPress. Intendevo che ho caricato la pagina wp-admin/options.php nel mio browser, ho modificato le impostazioni visualizzate e ho cliccato su salva. Ora, per i tuoi filtri, capisco come funzionano, ma da dove vengono ottenuti i valori senza filtro? C'è qualche possibilità che siano le impostazioni che ho modificato?

Mat Mat
3 apr 2016 20:08:45

Capisco, scusa per aver dato per scontato che avessi modificato un file core. Quei valori sono esattamente quelli che hai modificato e il filtro pre_option_* semplicemente filtra tutte le chiamate get_option() per quei valori, quindi il tuo approccio funzionerà comunque. Riguardo alla future-proof, dubito che queste opzioni verranno mai rimosse dal core senza fornire compatibilità all'indietro.

kovshenin kovshenin
3 apr 2016 20:20:16

OK, quindi fondamentalmente entrambe le nostre soluzioni sono simili nel senso che la mia definisce nuovi valori di opzione (presumo nel database) mentre la tua li cambia al volo, giusto? Quindi immagino che questo, insieme al tuo commento riguardo alle evoluzioni future, significhi che la mia soluzione sia corretta. Grazie per l'aiuto.

Mat Mat
3 apr 2016 20:31:46

Prego! Esatto, ma per chiarezza, entrambi i valori sono già definiti nel database, li stai semplicemente modificando dall'interfaccia options.php. Inoltre, non userei percorsi relativi perché a volte sono imprevedibili.

kovshenin kovshenin
3 apr 2016 20:38:16

Ho appena controllato in altre due installazioni che ho. Sia upload_path che upload_url_path esistono nel database ma sono vuoti, quindi presumo che ci sia un valore predefinito definito da qualche parte. Per quanto riguarda il percorso relativo, era dovuto al suggerimento del codex che ho menzionato nel mio post iniziale. Imposterò un percorso assoluto allora, sperando che non rompa il mio sito :-)

Mat Mat
3 apr 2016 20:46:43

Hai ragione, con valori vuoti i valori predefiniti vengono generati in wp_upload_dir: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/functions.php#L1816

kovshenin kovshenin
3 apr 2016 20:49:34

Non funziona su WP 4.7.2

Jeremy Jeremy
8 mar 2017 19:50:07

Ho appena votato a favore del commento di @kovshenin riguardo al percorso relativo. Ho verificato i valori con add_filter('upload_dir', function( $args ){ var_dump($args); });, i risultati includono qualcosa di strano come /home/foo/bar/wordpress/../uploads/. Quindi ho utilizzato un percorso assoluto per il campo upload_path nella pagina option.php.

norixxx norixxx
26 ott 2018 12:16:55
Mostra i restanti 3 commenti
0

Ho avuto un problema simile con il mapping dei media su un sottodominio. Domanda e risposta qui.
In breve, aggiungi al file functions.php quanto segue:

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

Se, per qualsiasi motivo, non desideri impostare le opzioni del percorso di caricamento nel database o nel tuo functions.php, puoi comunque impostare i filtri delle opzioni nel tuo wp-config.php in questo modo (prima di chiamare qualsiasi file core di WordPress):

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

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

WP_Hook::build_preinitialized_hooks aggiornerà correttamente questi elementi dell'array al formato interno effettivamente utilizzato.

26 mar 2020 13:41:11