WordPress : Modification du chemin d’URL visible vers les fichiers css et js
Est-ce que quelqu’un sait comment je peux activer automatiquement:
http://www.example.com/wp-content/themes/theme-name/css/stylesheeet.css
dans
http://www.example.com/css/stylesheet.css
Naturellement, je pourrais simplement créer le dossier applicable à la racine du site Web, y placer les fichiers et simplement les référencer, mais c’est maintenant ce que je recherche.
Je cherche un moyen de conserver tous les fichiers CSS et JavaScript dans le dossier du thème, mais j’aimerais que wordpress affiche le chemin d’URL décrit ci-dessus si vous affichez la source de la page.
Dans une situation idéale, je recherche un morceau de code qui peut être ajouté et qui le fait automatiquement pour tous les fichiers référencés dans mon dossier de thème, y compris toutes les images.
Solution n°1 trouvée
Dans une situation idéale, je recherche un morceau de code qui peut être ajouté et qui le fait automatiquement pour tous les fichiers référencés dans mon dossier de thème, y compris toutes les images.
Je vais proposer une solution alternative qui résoudra le problème.
Créez un lien symbolique depuis wp-content/themes/your-theme vers votre répertoire racine/css
Pour créer un lien symbolique sous Linux, utilisez la #ln -s
commande. Par exemple:
#ln -s /home/user-name/public_html/wp-content/themes/your_theme_name /home/user-name/public_html/css
Maintenant, n’importe quel fichier dans http://example.com/wp-content/themes/your_theme_name/ est accessible en utilisant l’url :
http://exemple.com/css/
Pour que cela fonctionne, vous devez autoriser la directive FollowSymLinks dans votre fichier httpd.conf. Vous pouvez également le mettre dans un fichier .htaccess qui remplacera le paramètre dans httpd.conf
Dans httpd.conf, le paramètre serait :
<Directory />
Options Indexes FollowSymLinks
</Directory>
Avant que le changement ne prenne effet, vous devrez redémarrer Apache :
#/etc/init.d/apache2 restart
Vous pouvez en savoir plus sur SymLinks sur Maxi-Pedia et dans Apache Docs
Solution n°2 trouvée
De prime abord, je pense que vous auriez besoin de deux choses :
Tout d’abord, une règle de réécriture dans votre fichier .htaccess comme ceci :
RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*) /wp-content/themes/theme-name/css/$1 [L]
RewriteRule ^js/(.*) /wp-content/themes/theme-name/js/$1 [L]
Deuxièmement, ajoutez un filtre au functions.php de votre thème comme suit :
function change_css_js_url($content) {
$current_path = '/wp-content/themes/theme-name/';
$new_path = '/'; // No need to add /css or /js here since you're mapping the subdirectories 1-to-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');
Quelques mises en garde : – si un plugin ou quelque chose n’utilise pas bloginfo() ou get_bloginfo(), il ne déclenchera pas le filtre. Vous pouvez contourner ce problème en connectant votre fonction à d’autres filtres si nécessaire. – certains plugins/thèmes/etc utilisent des chemins codés en dur. Vous ne pouvez pas faire grand-chose à ce sujet, sauf modifier le code pour utiliser l’une des fonctions de WP pour obtenir le chemin.
Voici le même exemple utilisant le thème Twentyten (pas de sous-répertoires css/js, mais l’idée est la même.)
.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
fonctions.php
function change_css_js_url($content) {
$current_path = '/wp-content/themes/';
$new_path = '/'; // No need to add /css or /js here since you're mapping the subdirectories 1-to-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');
0 commentaire