Cum se încarcă condițional un stylesheet doar pentru anumite pagini?

16 ian. 2012, 22:45:19
Vizualizări: 22.1K
Voturi: 11

Înainte să încep, vreau să menționez că există câteva articole foarte bune care se concentrează pe încărcarea condițională a scripturilor în funcție de conținutul paginii/articolului.

Acestea sunt excelente, dar sunt mult mai avansate decât ce vreau eu să fac.

Am senzația că răspunsul este folosirea funcției încorporate is_page() (codex), dar când încerc să o folosesc site-ul se strică sau pur și simplu nu funcționează.

Cred că execut logica condițională în locul greșit.

Iată ce am încercat să adaug în functions.php:

function wpse39130_register_more_stylesheets() {
    // înregistrează stylesheet-ul
    wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/stylesheet.css' );
}
add_action( 'init', 'wpse39130_register_more_stylesheets' );

function wpse39130_conditionally_enqueue_my_stylesheet() {
    // încarcă doar pe pagina cu slug-ul product-services
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Când elimin partea condițională, stylesheet-ul este încărcat cu succes, deci știu că funcționează.

1
Comentarii

De fapt, am folosit și eu copy-paste pe codul tău și funcționează perfecttext îngroșat

abhishek abhi Abhi abhishek abhi Abhi
13 feb. 2017 11:04:16
Toate răspunsurile la întrebare 3
1

Am copiat și lipit codul tău în mediul meu de dezvoltare, nu am schimbat nimic în afară de numele paginii, și funcționează perfect. Ești sigur că nu este încărcat corect și pur și simplu ai indicat greșit sau că pagina nu este denumită incorect sau ceva de genul?

16 ian. 2012 22:52:00
Comentarii

Mulțumesc, funcționează! Nu știu de ce nu mergea înainte. Lucruri mai ciudate s-au întâmplat, presupun. Sper că acest lucru va fi de folos și altcuiva.

Evan Mattson Evan Mattson
17 ian. 2012 02:19:42
0

Ceea ce ai făcut este corect—doar că folosești acțiunea greșită. Încearcă acțiunea "wp" în loc de "init". Când rulează "init", funcția is_page() nu va funcționa corect încă.

EDITARE: M-am înșelat. Am crezut că ai legat add_my_stylesheet la acțiunea init, dar nu ai făcut-o. Funcția is_page ar trebui să funcționeze din acțiunea enqueue_scripts. Scuze...continuă...

16 ian. 2012 22:53:39
1

Am încercat să urmăresc același cod și să văd dacă pot obține același rezultat, am observat că is_page() nu funcționează așa cum mă așteptam. Așa că am folosit variabila globală $post și am verificat numele/slug-ul categoriei, apoi am folosit o simplă comparare de text pentru a decide acțiunea.

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

Valoarea categoriei, dacă este doar o singură categorie (nu o subcategorie), va fi

echo esc_html( $postcat[0]->name ); // Afișează numele pe ecran

Pentru o subcategorie, veți avea următoarea variabilă populată

echo esc_html( $postcat[1]->name ); // Afișează numele pe ecran

Acum, în funcție de nevoile dumneavoastră, folosiți codul de mai jos, așa cum eu îl folosesc pentru a verifica numele subcategoriei:

// Folosiți $postcat[0]->name pentru numele categoriei părinte Poate fi numele subcategoriei dumneavoastră 
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // alt cod 
        }

Codul 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() {
        // încarcă doar pe pagina cu slug-ul product-services
    global $post; // Variabilă globală POST 
    $postcat = get_the_category( $post->ID ); // Obține informațiile despre categorie din ID-ul POST

    if ( ! empty( $postcat ) ) { // DACĂ CATEGORIA POSTULUI NU ESTE GOALĂ
    //    echo esc_html( $postcat[0]->slug );   // Afișează SLUG-ul pe ecran <Opțiune de depanare>
  //echo esc_html( $postcat[0]->name ); // Afișează numele pe ecran
     //echo esc_html( $postcat[1]->name ); // Afișează numele pe ecran

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

Exemplu: *Fără CSS suplimentar http://whatsq.com/category/gst16/

*CSS suplimentar cu fundal doar din categoria de mai sus http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and-and-more/

7 mai 2018 09:53:51
Comentarii

Am pus eu o întrebare? Este doar răspunsul meu la subiectul actual. Care este mai detaliat.

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