Come aggiungere un foglio di stile in modo condizionale solo per determinate pagine?
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.
- Sviluppo Plugin WordPress - Come Includere CSS e JavaScript in Modo Condizionale e Solo Quando Necessario nei Post
- Come caricare JavaScript come un esperto WordPress
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.

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?

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

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/
