WordPress : Comment puis-je laisser les modèles choisir quelles feuilles de style sont mises en file d’attente ?

Publié par Jean-Michel le

Mon thème functions.phps’accroche wp_enqueue_scriptspour 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.csssi 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.phpavant 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.phpconserve 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.phppour 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
});

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *