Wie kann ich ein Stylesheet nur für eine bestimmte Seite (n) bedingt in die Warteschlange stellen?

11

Bevor ich anfange, möchte ich anerkennen, dass es einige wirklich gute Artikel gibt, die darauf abzielen, Skripte basierend auf Seiten- / Post-Inhalten bedingt in die Warteschlange zu stellen.

Diese sind großartig, aber viel fortgeschrittener als das, was ich tun möchte.

Ich habe das Gefühl, dass die Antwort die integrierte is_page()Funktion ( Codex ) verwendet, aber wenn ich versuche, sie zu verwenden, bricht die Site oder funktioniert einfach nicht.

Ich glaube, ich führe die bedingte Logik nur an der falschen Stelle aus.

Folgendes habe ich versucht, zu meiner functions.php hinzuzufügen:

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' );

Wenn ich den bedingten Teil davon entferne, wird das Stylesheet erfolgreich in die Warteschlange gestellt, damit ich weiß, dass dies funktioniert.

Evan Mattson
quelle
Eigentlich habe ich auch Kopieren und Einfügen Ihres Codes und seiner Arbeit perfekt starken Text verwendet
abhishek abhi Abhi

Antworten:

4

Ich habe Ihren Code kopiert, in meine Entwicklungsumgebung eingefügt, nur den Seitennamen geändert und es funktioniert einwandfrei. Sind Sie sicher, dass es nicht in die Warteschlange gestellt wird und Sie nur falsch darauf hingewiesen haben oder dass die Seite nicht falsch benannt ist oder so?

mor7ifer
quelle
1
Danke, es funktioniert! Ich weiß nicht, warum es vorher nicht funktioniert hat. Es sind seltsamere Dinge passiert, denke ich. Hoffentlich wird dies jemand anderem von Nutzen sein.
Evan Mattson
2

Was Sie haben, ist richtig - Sie verbinden es einfach mit der falschen Aktion. Versuchen Sie die Aktion "wp" anstelle von "init". Wenn init ausgeführt wird, funktioniert is_page () noch nicht richtig.

EDIT: Ich liege falsch. Ich dachte, Sie hätten add_my_stylesheet an init angehängt, aber Sie tun es nicht. is_page sollte mit der Aktion enqueue_scripts funktionieren. Entschuldigung ... mach weiter ...

MathSmath
quelle
-1

Ich habe versucht, dem gleichen Code zu folgen und zu sehen, ob ich das gleiche Ergebnis erzielen kann. Was mir aufgefallen ist, ist, dass is_page () nicht wie erwartet funktioniert. Also folgte ich der globalen Variablen $ post und überprüfte den Kategorienamen / Slug. Letztere verwendeten einen einfachen Textvergleich, um die Aktion zu bestimmen.

    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 
}

Der Wert der Kategorie, wenn es sich nur um eine Kategorie (nicht um eine Unterkategorie) handelt

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

Für die Unterkategorie wird die folgende Variable ausgefüllt

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

Verwenden Sie nun je nach Bedarf den folgenden Code, um den Namen der Unterkategorie zu überprüfen:

//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 
        }

Vollständiger Code:

        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' );

Beispiel: * Kein zusätzliches CSS http://whatsq.com/category/gst16/

* Zusätzliches CSS mit Hintergrund nur aus der oben genannten Kategorie http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- und mehr/

Piclaunch S.
quelle
Habe ich eine Frage gestellt? Es ist nur meine Antwort auf das aktuelle Thema. Welches ist detaillierter.
Piclaunch S