Come aggiungere un foglio di stile in modo condizionale solo per determinate pagine?

16 gen 2012, 22:45:19
Visualizzazioni: 22.1K
Voti: 11

Prima di iniziare, voglio riconoscere che ci sono alcuni ottimi articoli che si concentrano su come caricare script in modo condizionale in base al contenuto della pagina/post.

Questi sono ottimi articoli, ma sono molto più avanzati rispetto a quello che voglio fare.

Ho l'impressione che la soluzione sia utilizzare la funzione integrata is_page() (codex), ma quando provo ad usarla il sito si rompe o semplicemente non funziona.

Penso di star eseguendo la logica condizionale nel punto sbagliato.

Ecco cosa ho provato ad aggiungere al mio functions.php:

// Registra i fogli di stile aggiuntivi
function wpse39130_register_more_stylesheets() {
    wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/stylesheet.css' );
}
add_action( 'init', 'wpse39130_register_more_stylesheets' );

// Carica il foglio di stile in modo condizionale
function wpse39130_conditionally_enqueue_my_stylesheet() {
    // carica solo nella pagina con slug products-services
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Quando rimuovo la parte condizionale, il foglio di stile viene caricato con successo quindi so che quella parte funziona.

1
Commenti

In realtà ho anche copiato e incollato il tuo codice e funziona perfettamentestrong text

abhishek abhi Abhi abhishek abhi Abhi
13 feb 2017 11:04:16
Tutte le risposte alla domanda 3
1

Ho copiato e incollato il tuo codice nel mio ambiente di sviluppo, non ho cambiato nulla tranne il nome della pagina, e funziona perfettamente. Sei sicuro che non sia stato accodato e che tu non abbia semplicemente puntato male o che il nome della pagina non sia errato o qualcosa del genere?

16 gen 2012 22:52:00
Commenti

Grazie, funziona! Non so perché prima non andasse. Cose più strane sono successe, immagino. Spero che possa essere utile a qualcun altro.

Evan Mattson Evan Mattson
17 gen 2012 02:19:42
0

Quello che hai è corretto--stai solo agganciandolo all'azione sbagliata. Prova con l'azione "wp" invece di "init". Quando init viene eseguito, is_page() non funzionerà ancora correttamente.

MODIFICA: Mi sbagliavo. Pensavo che avessi add_my_stylesheet agganciato a init, ma non è così. is_page dovrebbe funzionare dall'azione enqueue_scripts. Scusa...prosegui pure...

16 gen 2012 22:53:39
1

Stavo cercando di seguire lo stesso codice per vedere se potevo ottenere lo stesso risultato, quello che ho notato è che is_page() non funziona come previsto. Quindi ho utilizzato la variabile globale $post e ho controllato il nome/slug della categoria, poi ho usato un semplice confronto di testo per decidere l'azione.

    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 
}

Il valore della categoria se è una sola categoria (non una sottocategoria) sarebbe:

echo esc_html( $postcat[0]->name ); // Mostra il nome a schermo

Per le sottocategorie avrai la seguente variabile popolata:

echo esc_html( $postcat[1]->name ); // Mostra il nome a schermo

Ora in base alle tue necessità usa il codice qui sotto, come sto facendo io per controllare il nome della sottocategoria:

// Usa $postcat[0]->name per il nome della categoria genitore oppure può essere il nome della tua sottocategoria
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // altro codice 
        }

Codice completo:

        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() {
        // carica solo nella pagina con slug product-services
    global $post; // Variabile globale POST 
    $postcat = get_the_category( $post->ID ); // Ottieni le info della Categoria dall'ID del POST

    if ( ! empty( $postcat ) ) { // SE LA CATEGORIA DEL POST NON È VUOTA
    //    echo esc_html( $postcat[0]->slug );   // Mostra lo SLUG a schermo <opzione di debug>
  //echo esc_html( $postcat[0]->name ); // Mostra il nome a schermo
     //echo esc_html( $postcat[1]->name ); // Mostra il nome a schermo

    //echo var_dump($postcat ); // Per 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' );

Esempio: *Nessun CSS Extra http://whatsq.com/category/gst16/

*CSS Extra con sfondo solo dalla categoria sopra http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and-and-more/

7 mag 2018 09:53:51
Commenti

Ho fatto una domanda? È solo la mia risposta all'argomento attuale. Che è più dettagliata.

Piclaunch S Piclaunch S
8 mag 2018 00:06:49