Schimbă calea și URL-ul de încărcare WordPress
Pentru o instalare nouă, vreau să mut folderul de încărcare într-un subdomeniu (presupus a accelera descărcarea). Subdomeniul meu face legătura cu un folder numit static. Deci am:
- Home
- wp
- wp-admin
- wp-content
- wp-include
- static
- wp
Acum trebuie să spun WordPress-ului unde este folderul de încărcare și să-i definesc URL-ul. Codex-ul spune că ar trebui să editez wp-config pentru a defini UPLOADS relativ la ABSPAHT. Dar dacă pun define( 'UPLOADS', '../static' );
, bineînțeles că URL-urile în pagini apar ca //mydomain.tld/wp/../static/image.jpg
Am căutat prin diverse surse și am găsit multe răspunsuri diferite la această problemă (filtre, editare DB,...), unele dintre ele nemai fiind valabile (de când pagina de setări media nu mai permite schimbarea folderului de încărcare), iar altele evident greșite... Vreau să o fac în modul corect.
Am accesat pagina wp-admin/options.php și am setat upload_path = ../static
și upload_url_path = http://static.mydomain.tld
și pare să funcționeze.
Dar asta este modalitatea corectă de a face acest lucru? Și dacă dezvoltatorii au eliminat aceste opțiuni din pagina de setări media, nu există riscul ca această funcționalitate să fie complet eliminată mai târziu?

Am accesat pagina wp-admin/options.php și am setat... Dar așa ar trebui făcut?
Nu. Nu ar trebui să modifici niciodată fișierele de nucleu WordPress deoarece toate modificările tale vor fi pierdute la următoarea actualizare. Ar trebui să folosești acțiuni și filtre în loc:
add_filter( 'pre_option_upload_path', function( $upload_path ) {
return '/calea/catre/static';
});
add_filter( 'pre_option_upload_url_path', function( $upload_url_path ) {
return 'http://static.exemplu.org';
});

Nu, nu, există o neînțelegere aici. Bineînțeles că nu aș edita niciodată un fișier WordPress. Voiam să spun că am încărcat pagina wp-admin/options.php în browser, am modificat setările afișate și am dat click pe salvare. Acum, pentru filtrele tale, înțeleg cum funcționează, dar de unde sunt obținute valorile fără filtru? Există vreo posibilitate ca acestea să fie setările pe care le-am modificat?

Am înțeles, îmi cer scuze că am presupus că ai editat un fișier de bază. Acelea sunt exact valorile pe care le-ai modificat, iar filtrul pre_option_* pur și simplu filtrează toate apelurile get_option()
pentru acele valori, deci abordarea ta va funcționa și ea. Referitor la viitor, mă îndoiesc că aceste opțiuni vor fi vreodată eliminate din nucleu fără a oferi compatibilitate retroactivă.

OK, deci practic ambele soluții sunt similare în sensul că a mea definește noi valori ale opțiunilor (presupun că în baza de date), în timp ce a ta le modifică pe parcurs, corect? Deci cred că aceasta, împreună cu comentariul tău referitor la evoluțiile viitoare, înseamnă că soluția mea este corectă. Mulțumesc pentru ajutor.

Cu plăcere! Corect, dar doar pentru a clarifica, ambele valori sunt deja definite în baza de date, tu doar le modifici din interfața options.php. De asemenea, nu aș folosi căi relative pentru că uneori sunt impredictibile.

Tocmai am verificat în alte două instale pe care le am. Atât upload_path cât și upload_url_path există în baza de date dar sunt goale, așa că presupun că există o valoare implicită definită undeva. În ceea ce privește calea relativă, asta a fost din cauza indiciului din codex pe care l-am menționat în postarea inițială. Voi seta o cale absolută atunci, sper să nu stric site-ul :-)

Ai dreptate, cu valori goale, valorile implicite sunt generate în wp_upload_dir
: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/functions.php#L1816

Tocmai am votat pentru comentariul lui @kovshenin despre calea relativă.
Am verificat valorile cu add_filter('upload_dir', function( $args ){ var_dump($args); });
, rezultatele includ ceva ciudat precum /home/foo/bar/wordpress/../uploads/
. Așa că am folosit calea absolută pentru câmpul upload_path în pagina option.php.

Am avut o problemă similară cu maparea subdomeniului media. Am întrebat și am primit răspuns aici.
Pe scurt, adăugați în functions.php următoarele:
update_option('upload_url_path', '/wp-content/uploads');

Dacă, din orice motiv, nu doriți să setați opțiunile pentru calea de încărcare în baza de date sau în fișierul functions.php
, puteți totuși seta filtrele de opțiuni în wp-config.php
astfel (înainte de a apela orice fișier din nucleul WordPress):
$GLOBALS['wp_filter']['pre_option_upload_path'][10][] = array(
'function' => function( $upload_path ){
return '/calea/catre/static';
},
'accepted_args' => 1,
);
$GLOBALS['wp_filter']['pre_option_upload_url_path'][10][] = array(
'function' => function( $upload_url_path ){
return 'http://static.exemplu.org';
},
'accepted_args' => 1,
);
WP_Hook::build_preinitialized_hooks
va actualiza corespunzător aceste elemente de matrice în formatul intern folosit efectiv.
