Cum se încarcă condițional un stylesheet doar pentru anumite pagini?
Î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.
- Dezvoltare Plugin WordPress - Cum să incluzi CSS și JavaScript condițional și doar când este necesar pentru articole
- Cum să încarci JavaScript ca un maestru WordPress
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ă.

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?

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ă...

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/
