web-dev-qa-db-fra.com

Modification du chemin d'accès visible aux fichiers css et js

Est-ce que quelqu'un sait comment je peux automatiquement tourner:

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 correspondant à la racine du site Web, y placer les fichiers et les référencer, mais c’est ce que je cherche maintenant.

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 de l’URL indiqué ci-dessus si vous affichez le source de la page.

Dans une situation idéale, je cherche un morceau de code à ajouter qui le fait automatiquement pour tous les fichiers référencés dans mon dossier de thèmes, y compris les images.

4
NetConstructor.com

Je pense que vous avez 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 ceci:

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 ajoutant votre fonction à d’autres filtres, si nécessaire. - certains plugins/themes/etc utilisent des chemins codés en dur. Vous ne pouvez rien faire à 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

functions.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');
2
gabrielk

Dans une situation idéale, je cherche un morceau de code pouvant être ajouté> automatiquement pour tous les fichiers référencés dans mon dossier de thème, y compris les images.

Je vais proposer une solution alternative qui résoudra le problème.

Crée un lien symbolique de wp-content/themes/your-theme vers votre répertoire racine/css

Pour créer un lien symbolique sous Linux, utilisez la commande #ln -s. Par exemple:

#ln -s /home/user-name/public_html/wp-content/themes/your_theme_name /home/user-name/public_html/css

Désormais, tous les fichiers de http://example.com/wp-content/themes/your_theme_name/ sont accessibles à l’aide de l’URL:

http://example.com/css/

Pour que cela fonctionne, vous devez autoriser la directive FollowSymLinks dans votre fichier httpd.conf. Vous pouvez également le placer 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 le Apache Docs

2
Chris_O