WordPress : Comment puis-je laisser les modèles choisir quelles feuilles de style sont mises en file d’attente ?
Mon thème functions.php
s’accroche wp_enqueue_scripts
pour enregistrer quelques feuilles de style qui sont utilisées par différentes pages du site. Voici une version simplifiée de ma configuration :
add_action("wp_enqueue_scripts", function() {
// This stylesheet is used on *every* page
wp_register_style("sitewide", get_template_directory_uri() . "/assets/sitewide.css");
wp_enqueue_style("sitewide");
// These stylesheets are used by *some* pages
wp_register_style("pagetype1", get_template_directory_uri() . "/assets/pagetype1.css", array("sitewide"));
wp_register_style("pagetype2", get_template_directory_uri() . "/assets/pagetype2.css", array("sitewide"));
});
Chaque didacticiel que j’ai trouvé jusqu’à présent met en file d’attente chaque feuille de style à partir du rappel lui-même, mais je ne veux pas le faire. Je suppose que cela entraînerait l’inclusion de toutes mes feuilles de style sur chaque page, ce qui n’est pas ce que je veux. Je veux uniquement mettre en file d’attente pagetype1.css
si le modèle sous-jacent d’une certaine page l’utilise.
Disons que je veux que ma page d’accueil utilise la feuille de style de type de page 1. Mon intuition serait d’appeler wp_enqueue_style("pagetype1");
juste front_page.php
avant d’inclure l’en-tête, qui contient l’ wp_head()
appel. Cela ne fait rien. Le CSS à l’échelle du site, d’autre part, a été inclus comme je m’y attendais. Qu’est-ce que je fais mal?
Je sais qu’il existe une solution de contournement, mais je préférerais que cela front-page.php
conserve le contrôle sur les feuilles de style supplémentaires chargées.
Edit : C’est ce à quoi je me suis retrouvé après quelques discussions avec toscho . J’ai ajouté ceci à functions.php
:
// Enqueues a stylesheet handle or an array of stylesheet handles.
function mytheme_enqueueStyle($handles) {
if (is_array($handles)) {
add_action("wp_enqueue_scripts", function() use ($handles) {
foreach ($handles as $handle) {
wp_enqueue_style($handle);
}
});
} else if (is_string($handles)) {
add_action("wp_enqueue_scripts", function() use ($handles) {
wp_enqueue_style($handles);
});
} else {
wp_die("Unsupported parameter type.");
}
}
Ensuite, j’ai appelé mytheme_enqueueStyle("pagetype1")
de front-page.php
pour mettre en file d’attente la feuille de style. Cette façon de faire a fini par être incompatible avec WP Minify.
Solution n°1 trouvée
Vérifiez le modèle actuel dans votre rappel. Il s’agit d’un champ post-méta nommé _wp_page_template
.
add_action("wp_enqueue_scripts", function()
{
// This stylesheet is used on *every* page
wp_register_style("sitewide", get_template_directory_uri() . "/assets/sitewide.css");
wp_enqueue_style("sitewide");
if ( ! is_singular() )
return;
$template = get_post_meta( get_the_ID(), '_wp_page_template', TRUE );
// now enqueue further stylesheets depending on the current template
});
0 commentaire