Comment mettre en file d'attente conditionnelle une feuille de style uniquement pour une ou plusieurs pages?

11

Avant de commencer, je tiens à reconnaître qu'il existe de très bons articles qui visent à mettre en file d'attente conditionnelle des scripts en fonction du contenu de la page / publication.

Ce sont excellents, mais ils sont beaucoup plus avancés que ce que je veux faire.

J'ai l'impression que la réponse utilise la is_page()fonction intégrée ( codex ), mais lorsque j'essaie de l'utiliser, le site tombe en panne ou ne fonctionne tout simplement pas.

Je pense que j'exécute simplement la logique conditionnelle au mauvais endroit.

Voici ce que j'ai essayé d'ajouter à mes fonctions.php:

function wpse39130_register_more_stylesheets() {
    wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/stylesheet.css' );
}
add_action( 'init', 'wpse39130_register_more_stylesheets' );

function wpse39130_conditionally_enqueue_my_stylesheet() {
    // only enqueue on product-services page slug
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Lorsque j'en supprime la partie conditionnelle, la feuille de style est correctement mise en file d'attente, donc je sais que cela fonctionne.

Evan Mattson
la source
En fait, j'ai également utilisé copier et coller votre code et son travail texte
abhishek abhi Abhi

Réponses:

4

J'ai copié votre code dans mon environnement de développement, je n'ai changé que le nom de la page, et cela fonctionne très bien. Êtes-vous sûr qu'il n'est pas mis en file d'attente et que vous l'avez simplement pointé mal ou que la page n'est pas nommée incorrectement ou quelque chose?

mor7ifer
la source
1
Merci, ça marche! Je ne sais pas pourquoi ça ne fonctionnait pas avant. Des choses plus étranges se sont produites, je suppose. J'espère que cela sera utile à quelqu'un d'autre.
Evan Mattson
2

Ce que vous avez raison est juste - vous le raccordez simplement à la mauvaise action. Essayez l'action "wp" au lieu de "init". Lorsque init s'exécute, is_page () ne fonctionne pas encore correctement.

EDIT: je me trompe. Je pensais que vous aviez ajouté add_my_stylesheet à init, mais ce n'est pas le cas. is_page devrait fonctionner à partir de l'action enqueue_scripts. Désolé ... continue ...

MathSmath
la source
-1

J'essayais de suivre le même code et de voir si je pouvais obtenir le même résultat, ce que j'ai remarqué is_page () ne fonctionne pas comme prévu. J'ai donc suivi la variable globale $ post et vérifié le nom de la catégorie / slug et ce dernier utilise un texte simple comparer pour décider de l'action.

    global $post;
    $postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
 echo esc_html( $postcat[0]->ID );   // Debug 
 echo esc_html( $postcat[1]->name ); // Debug 
 echo var_dump($postcat ); // Debug 
}

La valeur de la catégorie si sa seule catégorie (pas une sous-catégorie) serait

echo esc_html( $postcat[0]->name ); //Display name on screen

Pour la sous-catégorie, vous aurez la variable suivante remplie

echo esc_html( $postcat[1]->name ); //Display name on screen

Maintenant, en fonction de vos besoins, utilisez le code ci-dessous, comme j'utilise pour vérifier le nom de la sous-catégorie:

//Use $postcat[0]->name for parent category name Can be your sub category name 
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // other code 
        }

Code complet:

        function wpse39130_register_more_stylesheets() {
        wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/whatsqshop.css' );
    }
    add_action( 'init', 'wpse39130_register_more_stylesheets' );

    function wpse39130_conditionally_enqueue_my_stylesheet() {
        // only enqueue on product-services page slug
    global $post; //GLobal Post variable 
    $postcat = get_the_category( $post->ID ); // Get the Category info from POST ID

    if ( ! empty( $postcat ) ) { // IF POST CATEGORY IS NOT EMPTY
    //    echo esc_html( $postcat[0]->slug );   //Display SLUG On output screen <Debug option>
  //echo esc_html( $postcat[0]->name ); //Display name on screen
     //echo esc_html( $postcat[1]->name ); //Display name on screen

    //echo var_dump($postcat ); // For debug 
    }
    //  if( is_single(88)) {
       if ( $postcat[1]->name == 'Shopping' ) {
            wp_enqueue_style( 'stylesheet_name' );
        }else{
    //wp_enqueue_style( 'stylesheet_name' );
    }

    }
    add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Exemple: * Pas de CSS supplémentaire http://whatsq.com/category/gst16/

* CSS supplémentaire avec arrière-plan de la catégorie ci-dessus uniquement http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- et plus/

Piclaunch S
la source
Ai-je posé une question? C'est juste ma réponse au sujet actuel. Ce qui est plus détaillé.
Piclaunch S