Modificarea căii URL vizibile pentru fișierele CSS și JS

10 sept. 2010, 00:40:19
Vizualizări: 17.9K
Voturi: 4

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

0
Toate răspunsurile la întrebare 2
9

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');
10 sept. 2010 01:58:58
Comentarii

@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?

NetConstructor.com NetConstructor.com
10 sept. 2010 09:13:21

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

gabrielk gabrielk
10 sept. 2010 20:37:29

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

NetConstructor.com NetConstructor.com
11 sept. 2010 12:39:34

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?

gabrielk gabrielk
13 sept. 2010 21:40:57

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?

NetConstructor.com NetConstructor.com
14 sept. 2010 05:33:40

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

NetConstructor.com NetConstructor.com
15 sept. 2010 06:28:46

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.

gabrielk gabrielk
19 sept. 2010 21:05:39

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

NetConstructor.com NetConstructor.com
10 oct. 2012 14:19:34

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

NetConstructor.com NetConstructor.com
10 oct. 2012 14:22:37
Arată celelalte 4 comentarii
3

Î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:

http://exemplu.com/css/

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

10 sept. 2010 02:32:00
Comentarii

+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ță!

Grant Palin Grant Palin
10 sept. 2010 06:49:22

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

hannit cohen hannit cohen
10 sept. 2010 07:54:15

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?

NetConstructor.com NetConstructor.com
10 sept. 2010 08:54:36