Jak warunkowo kolejkować arkusz stylów tylko dla niektórych stron?


11

Zanim zacznę, chcę potwierdzić, że istnieją naprawdę dobre artykuły, których celem jest warunkowe kolejkowanie skryptów na podstawie zawartości strony / postu.

Są świetne, ale są znacznie bardziej zaawansowane niż to, co chcę robić.

Wydaje mi się, że odpowiedź korzysta z wbudowanej is_page()funkcji ( kodeksu ), ale kiedy próbuję jej użyć, strona się psuje lub po prostu nie działa.

Myślę, że po prostu wykonuję logikę warunkową w niewłaściwym miejscu.

Oto, co próbowałem dodać do moich funkcji. 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' );

Kiedy usuwam część warunkową, arkusz stylów jest z powodzeniem kolejkowany, więc wiem, że działa.


Właściwie użyłem również skopiować i wkleić twój kod i jego działanie doskonale silny tekst
abhishek abhi Abhi

Odpowiedzi:


4

Skopiowałem wklejony kod do mojego środowiska programistycznego, zmieniłem tylko nazwę strony i działa dobrze. Czy jesteś pewien, że nie jest kolejkowane i po prostu źle wskazałeś lub że strona nie ma niepoprawnej nazwy?


1
Dzięki, działa! Nie wiem, dlaczego to wcześniej nie działało. Chyba dziwniejsze rzeczy się wydarzyły. Mam nadzieję, że przyda się to komuś innemu.
Evan Mattson

2

To, co masz, jest słuszne - po prostu podpinasz to do niewłaściwego działania. Spróbuj wykonać akcję „wp” zamiast „init”. Kiedy init jest uruchomiony, is_page () jeszcze nie działa poprawnie.

EDYCJA: Mylę się. Myślałem, że masz add_my_stylesheet podpięty do init, ale nie masz. is_page powinien działać z akcji enqueue_scripts. Przepraszam ... kontynuuj ...


-1

Próbowałem postępować zgodnie z tym samym kodem i zobaczyć, czy mogę uzyskać ten sam wynik, co zauważyłem, że is_page () nie działa zgodnie z oczekiwaniami. więc śledziłem zmienną globalną $ post i sprawdziłem nazwę kategorii / ślimaka, a następnie użyłem prostego porównania tekstu, aby zdecydować o akcji.

    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 
}

Wartość kategorii, jeśli byłaby to tylko jedna kategoria (nie podkategoria)

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

W podkategorii należy wypełnić następującą zmienną

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

Teraz w zależności od potrzeb użyj poniższego kodu, tak jak używam do sprawdzenia nazwy podkategorii:

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

Pełny kod:

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

Przykład: * Brak dodatkowych CSS http://whatsq.com/category/gst16/

* Dodatkowe CSS z tłem tylko z powyższej kategorii http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- i więcej/


Czy zadałem pytanie? To tylko moja odpowiedź na bieżący temat. Co jest bardziej szczegółowe.
Piclaunch S
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.