Modificare il percorso visibile degli URL per i file CSS e JS
Qualcuno sa come posso trasformare automaticamente:
http://www.example.com/wp-content/themes/theme-name/css/stylesheeet.css
in
http://www.example.com/css/stylesheet.css
Naturalmente potrei semplicemente creare la cartella appropriata nella root del sito, posizionarci i file e referenziarli direttamente, ma non è questo quello che cerco.
Sto cercando un modo per mantenere tutti i file CSS e JavaScript all'interno della cartella del tema, ma vorrei che WordPress mostrasse il percorso URL sopra indicato quando si visualizza il codice sorgente della pagina.
Nella situazione ideale cerco un pezzo di codice che possa essere aggiunto e che faccia automaticamente questo per tutti i file referenziati all'interno della mia cartella del tema, incluse le immagini.

Penso che ti servano due cose:
Primo, una regola di riscrittura nel tuo file .htaccess come questa:
RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*) /wp-content/themes/theme-name/css/$1 [L]
RewriteRule ^js/(.*) /wp-content/themes/theme-name/js/$1 [L]
Secondo, aggiungi un filtro al functions.php del tuo tema in questo modo:
function change_css_js_url($content) {
$current_path = '/wp-content/themes/theme-name/';
$new_path = '/'; // Non è necessario aggiungere /css o /js qui poiché stai mappando le sottodirectory 1-a-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');
Un paio di avvertenze: - se un plugin o qualcos'altro non utilizza bloginfo() o get_bloginfo() non attiverà il filtro. Puoi ovviare a questo agganciando la tua funzione ad altri filtri se necessario. - alcuni plugin/temi ecc. utilizzano percorsi hard-coded. Non c'è molto che puoi fare se non modificare il codice per utilizzare una delle funzioni di WP per ottenere il percorso.
Ecco lo stesso esempio utilizzando il tema twentyten (senza sottodirectory css/js, ma l'idea è la stessa.)
.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 = '/'; // Non è necessario aggiungere /css o /js qui poiché stai mappando le sottodirectory 1-a-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 Questa sembra un'ottima soluzione ma per qualche motivo non funziona nel mio caso. Ho aggiunto le regole di rewrite necessarie, incluso il file functions.php appropriato e ho verificato che i percorsi alle posizioni originali fossero validi in entrambi i casi. Poi ho riavviato Apache ma quando aggiorno il browser non vedo alcun cambiamento. Dovrei anche precisare che tutti i file del mio tema fanno riferimento alla directory del template con <?php bloginfo('template_directory'); ?>. Potresti rivedere questo codice sul tuo sistema per capire cosa potrebbe essere modificato per farlo funzionare correttamente?

Hmm, a me funziona. L'ho appena testato usando il tema twentyten - leggermente modificato dato che quel tema non ha una sottodirectory css/js.

potresti verificare di nuovo... non riesco a capire perché non funziona nel mio caso

Scusa per la risposta tardiva, ero via per il weekend. Due domande: 1) I permalink degli articoli funzionano già sul tuo sito? 2) Se hai una copia pulita e funzionante di WP 3.0.1 con il tema Twentyten attivato e i permalink abilitati, il secondo frammento di codice che ho postato funziona per te?

1) sì, abilitati e funzionanti. 2) Non sto usando il tema twentyten, ho creato il mio tema PERSONALIZZATO MA all'interno dei file template di questo tema ho sempre usato <?php bloginfo('template_directory'); ?> ogni volta che viene referenziato un link a un'immagine o file. Creando il mio tema e i relativi file template non è il modo corretto di fare le cose? Se è corretto, è possibile che mi manchi qualcosa che impedirebbe a <?php bloginfo('template_directory'); ?> di cambiare il percorso URL per ottenere il risultato desiderato?

@gabrielk Ho accettato questa risposta perché penso abbia il maggior potenziale ma apprezzerei molto se potessi rivedere il tuo codice per vedere come potrebbe funzionare al meglio nella mia situazione.

Consiglierei di impostare un blog di test utilizzando twentyten e usando l'esempio che ho postato per twentyten. Se funziona, allora possiamo essere ragionevolmente sicuri che non si tratti di un problema di configurazione del server. Dopodiché, dovrei vedere il tuo file .htaccess attuale per aiutarti a debuggarlo ulteriormente.

una nota per altri che stanno leggendo... la soluzione di Gabe sopra ha effettivamente funzionato. il problema era dalla mia parte

hai trovato dei miglioramenti per perfezionare questo metodo? vorrei che WP semplificasse questo processo per renderlo coerente nel frontend e nel backend... Ho usato una soluzione ibrida personalizzata per le mie esigenze basandomi su parte del codice del tema roots, ma speravo ci fosse un metodo migliore.

In una situazione ideale sto cercando un pezzo di codice che possa essere aggiunto per fare automaticamente >questo per tutti i file referenziati all'interno della mia cartella del tema, incluse eventuali immagini.
Propongo una soluzione alternativa che risolverà il problema.
Crea un collegamento simbolico da wp-content/themes/tuo-tema alla tua directory root/css
Per creare un collegamento simbolico in Linux usa il comando #ln -s
. Ad esempio:
#ln -s /home/nome-utente/public_html/wp-content/themes/nome_tuo_tema /home/nome-utente/public_html/css
Ora qualsiasi file in http://esempio.com/wp-content/themes/tuo_tema/ può essere accessibile usando l'URL:
Affinché questo funzioni, devi permettere la direttiva FollowSymLinks nel tuo file httpd.conf. Puoi anche inserirla in un file .htaccess che sovrascriverà l'impostazione in httpd.conf
In httpd.conf l'impostazione sarebbe:
<Directory />
Options Indexes FollowSymLinks
</Directory>
Prima che la modifica abbia effetto dovrai riavviare Apache:
#/etc/init.d/apache2 restart
Puoi leggere di più riguardo i SymLinks su Maxi-Pedia e nella Documentazione di Apache

+1 L'unico problema che vedo è che il symlink dovrà essere creato per ogni tema che viene caricato e attivato. Per il resto, una bella soluzione!

un altro problema - questo significa che in realtà devi sostituire manualmente le chiamate all'header

grazie mille per questa risposta. In realtà stavo pensando di fare lo stesso ma speravo potesse esserci un modo per aggiungere codice al file functions.php che dica automaticamente a WordPress di cambiare la posizione di tutte le richieste dirette alla posizione originale con queste nuove posizioni "virtuali"... Qualcuno sa se esiste un modo per farlo?
