Modificarea căii URL vizibile pentru fișierele CSS și JS
Știe cineva cum aș putea transforma automat:
http://www.example.com/wp-content/themes/theme-name/css/stylesheeet.css
în
http://www.example.com/css/stylesheet.css
Desigur, aș putea crea folderul corespunzător în rădăcina site-ului, plasa fișierele acolo și doar să le referențiez, dar nu asta caut.
Doresc să păstrez toate fișierele CSS și JavaScript în folderul temei, dar aș vrea ca WordPress să afișeze calea URL prezentată mai sus atunci când vizualizezi sursa paginii.
Într-o situație ideală, caut o bucată de cod care poate fi adăugată și care face acest lucru automat pentru toate fișierele referențiate în folderul temei, inclusiv pentru imagini.

Pe moment cred că ai nevoie de două lucruri:
În primul rând, o regulă de rescriere în fișierul tău .htaccess astfel:
RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*) /wp-content/themes/theme-name/css/$1 [L]
RewriteRule ^js/(.*) /wp-content/themes/theme-name/js/$1 [L]
În al doilea rând, adaugă un filtru în functions.php al temei tale astfel:
function change_css_js_url($content) {
$current_path = '/wp-content/themes/theme-name/';
$new_path = '/'; // Nu este nevoie să adaugi /css sau /js aici deoarece mapezi subdirectoarele 1-la-1
$content = str_replace($current_path, $new_path, $content);
return $content;
}
add_filter('bloginfo_url', 'change_css_js_url');
add_filter('bloginfo', 'change_css_js_url');
Câteva avertismente: - dacă un plugin sau ceva nu utilizează bloginfo() sau get_bloginfo() nu va declanșa filtrul. Poți rezolva acest lucru prin conectarea funcției tale la alte filtre după cum este necesar. - unele plugin-uri/teme/etc folosesc căi hardcodate. Nu poți face prea multe în legătură cu asta decât să modifici codul pentru a utiliza una dintre funcțiile WP pentru a obține calea.
Iată același exemplu folosind tema twentyten (fără subdirectoare css/js, dar ideea este aceeași.)
.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^twentyten/(.*) /wp-content/themes/twentyten/$1 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
functions.php
function change_css_js_url($content) {
$current_path = '/wp-content/themes/';
$new_path = '/'; // Nu este nevoie să adaugi /css sau /js aici deoarece mapezi subdirectoarele 1-la-1
$content = str_replace($current_path, $new_path, $content);
return $content;
}
add_filter('bloginfo_url', 'change_css_js_url');
add_filter('bloginfo', 'change_css_js_url');

@gabrielk Aceasta pare a fi o soluție excelentă, dar din anumite motive nu funcționează pentru mine. Am adăugat regulile de rescriere necesare, am inclus fișierul functions.php corespunzător și m-am asigurat că în ambele cazuri căile către locațiile originale sunt valide. Am repornit apache, dar la reîmprospătarea browserului nu văd nicio modificare. De asemenea, trebuie să menționez că toate fișierele mele de temă fac referire la directorul șablon cu <?php bloginfo('template_directory'); ?>. Poți să revezi acest cod pe sistemul tău pentru a vedea ce ar trebui modificat pentru a funcționa corect?

Hmm, funcționează pentru mine. Tocmai am testat folosind tema twentyten -- ușor modificată, deoarece acea temă nu are un subdirector css/js.

poți verifica din nou... nu înțeleg de ce nu funcționează pentru mine

Scuze pentru răspunsul întârziat, am fost plecat în weekend. Două întrebări: 1) Permalinkurile postărilor funcționează deja pe site-ul tău? 2) Dacă ai o copie curată funcțională de WP 3.0.1 cu tema Twentyten activată și permalinkurile activate, al doilea fragment de cod pe care l-am postat funcționează pentru tine?

1) da, activate și funcționale. 2) Nu folosesc tema twentyten, am creat propria mea temă DAR în cadrul fișierelor de șablon pentru această temă am folosit întotdeauna <?php bloginfo('template_directory'); ?> ori de câte ori este referențiată o legătură către o imagine sau fișier. Prin adăugarea propriei mele teme și a fișierelor de șablon aferente, nu este acesta modul corect de a face lucrurile? Dacă este corect, atunci este posibil să-mi lipsească ceva care ar împiedica <?php bloginfo('template_directory'); ?> să schimbe calea URL-ului pentru a obține rezultatul dorit?

@gabrielk Am acceptat acest răspuns pentru că cred că are cel mai bun potențial, dar aș aprecia foarte mult dacă ai putea revizui codul tău pentru a vedea cum ar putea funcționa cel mai bine în situația mea.

Aș sugera să configurezi un blog de test folosind tema twentyten și să folosești exemplul pe care l-am postat pentru twentyten. Dacă funcționează, atunci putem fi destul de siguri că nu este o problemă de configurare a serverului. După aceea, ar trebui să văd fișierul tău .htaccess actual pentru a te ajuta să-l depanezi mai mult.

o notă pentru alții care citesc asta... soluția lui Gabe de mai sus a funcționat cu adevărat. problema era la mine

ai găsit vreo îmbunătățire pentru a perfecționa această metodă? mi-aș dori ca WP să simplifice acest proces, astfel încât să fie consistent atât în frontend, cât și în backend... Am folosit o soluție hibridă personalizată pentru nevoile mele, bazându-mă pe o parte din codul din tema roots, dar mi-aș dori să existe o metodă mai bună.

Într-o situație ideală, caut o bucată de cod care poate fi adăugată și care automat face acest lucru pentru toate fișierele referențiate în folderul temei mele, inclusiv pentru orice imagini.
Voi propune o soluție alternativă care va rezolva problema.
Creați o legătură simbolică de la wp-content/themes/tema-dvs. la directorul rădăcină/css
Pentru a crea o legătură simbolică în Linux, folosiți comanda #ln -s
. De exemplu:
#ln -s /home/nume-utilizator/public_html/wp-content/themes/numele_temei /home/nume-utilizator/public_html/css
Acum orice fișier din http://exemplu.com/wp-content/themes/numele_temei/ poate fi accesat folosind URL-ul:
Pentru ca această soluție să funcționeze, trebuie să permiteți directiva FollowSymLinks în fișierul httpd.conf. De asemenea, puteți adăuga setarea într-un fișier .htaccess, care va suprascrie setarea din httpd.conf.
În httpd.conf, setarea ar fi:
<Directory />
Options Indexes FollowSymLinks
</Directory>
Înainte ca modificarea să intre în vigoare, va trebui să reporniți Apache:
#/etc/init.d/apache2 restart
Puteți citi mai multe despre legăturile simbolice la Maxi-Pedia și în Documentația Apache

+1 Singura problemă pe care o văd este că symlink-ul va trebui creat pentru orice temă încărcată și activată. Altfel, o soluție drăguță!

altă problemă - asta înseamnă că de fapt trebuie să înlocuiți manual apelurile header

mulțumesc foarte mult pentru acest răspuns. De fapt, mă gândeam să fac și eu asta, dar speram că ar putea exista vreo metodă de a adăuga cod în fișierul functions.php care să spună automat WordPress-ului să schimbe locația tuturor cererilor care merg către locația reală în acele noi locații "virtuale"... Știe cineva dacă se poate face asta?
