web-dev-qa-db-fra.com

En utilisant PHP dans une feuille de style (éventuellement un problème de type ".htaccess"?)

Je suis désolé de poser une question qui est (à partir de ce que j'ai rassemblé) posée avec une fréquence relative, mais je pense que j'ai compliqué le problème en laissant un projet et en revenant ensuite après que mes compétences se soient rouillées. Ainsi, dans un thème très basique que j'ai créé il y a quelque temps pour un ami, j'ai utilisé PHP dans la feuille de style pour créer des variables permettant de randomiser les couleurs de certains éléments. Pour ce faire, j'ai nommé la feuille de style style.php (par opposition à CSS) et ajouté <?php header("Content-type: text/css; charset: UTF-8"); ?> en haut du fichier.

Cela fonctionnait bien à l'époque, mais depuis que je l'ai terminé, mon ami a cessé d'utiliser son site Web et j'ai décidé d'utiliser le thème pour mon propre site personnel. J'ai un compte ManagedWP GoDaddy et téléchargé le thème, mais maintenant, il s'agit de not working. C'est là que j'ai du mal à diagnostiquer le problème. Le problème le plus évident pour moi est que quelque chose empêche WordPress d'utiliser une feuille de style PHP. J'ai donc essayé de renommer la feuille de style en style.css, puis de modifier .htaccess pour qu'elle soit correctement modifiée. analysé comme PHP. La modification de .htaccess est une nouvelle chose pour moi. Je peux donc faire quelque chose de ridicule là-dedans, mais je me sers de this article comme guide, et maintenant le .htaccess dans le répertoire du thème (au même niveau que style.css ) se lit comme tel:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

<FilesMatch "^.*?style.*?$">
SetHandler php5-script
</FilesMatch>

Cependant, je n'obtiens toujours pas le même résultat qu'auparavant, lorsque WordPress semblait pouvoir utiliser une feuille de style PHP, et je ne comprenais pas quelles étaient les bonnes questions à poser. J'ai l'impression qu'une grande partie de cela revient sur mes pas, mais je ne suis pas sûr de la direction à prendre! Toute aide serait grandement appréciée!

3
GoodTimeHaver

Nous vous suggérons de déplacer la fonctionnalité souhaitée vers javascript; vous essayez tellement de surcharger le but de ces constructions ... même si vous le faites fonctionner, vous aurez un système très fragile et difficile à maintenir sur vos mains.

Notez que l'idée de style en ligne peut fonctionner, mais que la future politique de sécurité du contenu risque de la tuer. Le CSS en ligne est un point faible; voir cette Explication OWASP pour plus d'informations.

2
C C

À ce stade de la vie wordpress, c'est juste quelque chose que vous ne devriez pas faire (et que vous n'auriez pas dû faire en premier lieu). L’expérience montre que ce type de fichier CSS est très fragile * et qu’il se casse facilement lorsque la configuration de serveur liée à wordpress n’est pas celle de Vanilla, ce qui est probablement vrai pour tous les services gérés.

Ajoutez simplement ce que vous voulez en tant que style en ligne dans votre thème à l’aide du crochet wp_head. (non, ils ne sont pas un point faible et il ne sera jamais tué, à moins que quelqu'un veuille casser tous les sites sur Internet)

* ce type de fichiers était connu pour avoir des problèmes de sécurité et se brisait lorsque la structure des répertoires était modifiée

2
Mark Kaplun

(Vous semblez avoir 2 blocs de code WordPress pour une raison quelconque??! Je suppose que c'est une sorte d'erreur de copier/coller dans votre question?)

et maintenant le .htaccess dans le répertoire du thème (le même niveau de répertoire que style.css) se lit comme suit:

La création de plusieurs fichiers .htaccess dans différents répertoires est susceptible de causer davantage de problèmes. (Est-ce la raison pour laquelle vous avez dupliqué le WP contrôleur-avant?). Vous devez ajouter les directives appropriées au fichier .htaccess principal dans la racine du document, tout en veillant à l'ordre.

quelque chose fait que WordPress n'aime plus utiliser une feuille de style PHP
:
WordPress semblait bien fonctionner avec une feuille de style PHP

WordPress lui-même ne devrait rien avoir à faire avec le fichier CSS/PHP. Cependant, votre hébergement "ManagedWP" peut avoir une sécurité supplémentaire qui empêche ces fichiers "non autorisés" (ou plutôt non-WordPress) PHP d'être analysés?

<FilesMatch "^.*?style.*?$">
SetHandler php5-script
</FilesMatch>

L'analyse de tous les fichiers contenant simplement le "style" de Word en tant que PHP pourrait potentiellement poser problème. Cependant, utiliser SetHandler peut être très spécifique au serveur, de sorte que cela peut ne pas fonctionner de toute façon.

Une alternative consiste à conserver le fichier nommé style.php (c.-à-d. Avec une extension de fichier .php), mais le référencer en tant que style.css dans votre code HTML. Ensuite, en utilisant mod_rewrite dans .htaccess, réécrivez en interne une demande pour style.css dans style.php before le contrôleur frontal WordPress.

Par exemple:

RewriteRule ^url-path/to/style\.css$ /filesystem-path/to/style.php [L]

(Stress ... cela doit aller avant le contrôleur frontal WordPress.)

1
MrWhite