Usare i tag condizionali in WordPress per personalizzare al massimo il tema
Scritto da Erriko in Wordpress il 25 maggio 2009
Usando i cosiddetti “tag condizionali”, personalizzare il proprio tema wordpress risulta più semplice e dai risultati assicurati. Si può davvero decidere cosa mostrare e quando.
Usando i tag condizionali si può:
- Mostrare qualcosa solo in alcune pagine
- Mostrare qualcosa solo in alcune categorie
- Mostrare qualcosa nell’header o nel footer solo in alcuni orari
- ostrare qualcosa solo in particolari sotto-pagine
- Mostrare qualcosa solo nella bacheca
- Mostrare qualcosa nella sidebar solo nel caso si presentino determinate condizioni
- Fare qualcosa solo quando c’è uno “sticky post” (post in evidenza)
- Fare qualcosa solo quando si sta utilizzando un aprticolare template per la pagina in uso
- Fare qualcosa solo per le pagine degli autori
- Mostrare qualcosa solo nelle pagine di ricerca o di errore (pagine 404 o pagina “non trovato”)
Dove usare i tag condizionali
Dipende da com’è strutturato il tema. Alcuni usano index.php per tutto, altri utilizzano un file php per ogni cosa (home.php, page.php, single.php, category.php ecc…).
Con i tag condizionali puoi inserire tutto il codice in un unico file (tanto la pagina si comporterà nel modo specificato dalle condizioni dei tag condizionali) oppure combinare più files php e condizioni… Insomma non ci sono limiti, con un po’ di fantasia (e qualche riga di codice).
I tag condizionali possono essere usati nei “loop” o fuori, nelle pagine dei temi, ma anche nell’header, nel footer, nei commenti, e nella/e sidebar/s.
Eesempi di tag condizionali
Visto che il concetto di fondo probabilmente è chiaro ai più, e visto che l’utilizzo che si può fare di questi tag è pressocchè infinito, proverò a dare qualche spunto generico che potrete poi reinterpretare a seconda delle vostre idee e le vostre esigenze.
Se questa è la pagina X mostra questo…
Il modo più comune di utilizzare i tag condizionali in WordPress è sicuramente quello di gestire cosa mostrare in determinate pagine.
L’esempio tipico può essere un tema che fa uso di index.php sia per mostrare l’home page che per mostrare le categorie. Nel caso volessimo mostrare un testo, un filmato flash, una pubblicità (o qualsiasi altra cosa) soltanto nella home, dovremmo inserire nel punto desiderato:
<?php if (is_home()) { ?>
questo testo sarà mostrato soltanto nella home page
<?php } ?>
In funzione del caso è possibile sostituire is_home con is_front_page, is_single, is_sticky, is_page, is_page_template, is_category, is_tag, is_author, is_date, is_archive, or is_attachment per mostrare ciò che vogliamo praticamente in qualsiasi pagina di WordPress.
Se questa è la pagina X mostra questo, se invece è la Y mostra quest’altro…
Seguendo il principio riportato sopra possiamo concatenare quante condizioni vogliamo. Ottenendo ad esempio:
<?php if (is_home()) { ?>
<p>testo/immagine/flash/pubblicità... Quello che vogliamo nella home!</p>
<?php } elseif (is_single()) { ?>
<p>Quest'altro elemento lo vedremo nei post</p>
<?php } elseif (is_category()) { ?>
<p>mmm... questo qui lo mostriamo nelle pagine delle categorie</p>
<?php else { ?>
<p>se non ci troviamo in nessuna delle pagine mensionate precedentemente mostriamo questo qui</p>
<?php } ?>
Inoltre è possibile utilizzare OR (che si scrive così || ) per dire di mostrare la stessa cosa in più tipi di pagine, come ad esempio:
<?php if (is home() || is_single() || is_category() || is_page()
|| is_archive() { ?>
<p>Show this on all those pages!</p>
<?php } ?>
Utilizzando OR, quindi wordpress sa che deve mostrare quell’elemento se si trova in home oppure se si trova in un post oppure in una pagina ecc…
Mostra questo ovunque, tranne…
E’ possibile inoltre comandare WordPress di mostrare un determinato elemento ovunque tranne che in alcune pagine/posizioni utilizzando un codice del tipo:
<?php if (is_home()) {
}
else { ?>
<p>Questo lo mostriamo ovunque tranne che nella home page!!</p>
<?php } ?>
Anche qui si può utilizzare OR (||), come detto prima, per aggiungere una pagina da escludere, sulla scia dell’esempio precedente.
Per essere ancora più specifici
Utilizzando sempre gli esempi precedenti, è possibile passare particolari parametri per specificare ancora più nel dettaglio dove mostrare un determinato elemento.
Per esempio, invece di mostrare un elemento in tutti i post con is_single, è possibile decidere di selezionarne uno in particolare, oppure diversi.
is_single('25') // identifica il post nel quale mostrare l'elemento dall'ID del post
is_single('Titolo del post') //identifica il post dal titolo
is_single('titolo-del-post') //identifica il post dal permalink
is_single(array('25','Titolo del post','titolo-del-post','1701')) //mostra l'elemento nei post specificati
E’ possibile utilizzare parametri simili anche in pagine, categorie ecc. La pagina ufficiale “WordPress Conditional Tag page” mostra una lista completa di tutti i parametri possibili.
Altri esempi pratici
Mostrare il blogroll soltanto in home page:
<? php if (is_home()) {
wp_list_bookmarks();
}
?>
Mostrare un header (e/o un footer) diverso a seconda della pagina in cui ci troviamo:
<? php if (is_home() || is_single() || is_page()) {
get_header();
}
elseif (is_category() || is_tag()) {
include (TEMPLATEPATH . '/header2.php');
}
elseif (is_404() || is_search())
include (TEMPLATEPATH . '/header3.php');
} ?>
In definitiva
Come detto prima non ci sono limiti alle applicazioni possibili grazie a questi tag. E molti di essi in effetti non vengono sfruttati fino in fondo dai temi in circolazione.
Con un po’ di fantasia e ingegno però, si può modificare il proprio tema preferito ed ottenere un risultato davvero di successo e adatto a tutte le situazioni, oppure potete elargire un piccolissimo compenso a me e sarò lieto di fare il lavoro per voi!
Happy blogging!






grazie erriko!!
mi è servito per evitare di appesantire la pagina con i video in rilievo nella mia home
Figurati. Se ti servono altri consigli basta chiedere
ciao!
sono in fase di costruzione del mio sito-blog (www.giuliascrive.it) purtroppo il tema che ho scelto mi dà problemi, non mi mostra anche in home la miniatura delle foto inserite negli articoli, leggendo il tuo articolo credo che quello da te descritto possa essere un modo per risolvere il mio problema. precisando che sono davvero inesperta ti chiederei se per favore mi consigli qual’è il passaggio da te descritto per risolvere il mio problema! grazie mille!
ps spero di essere stata chiara nella spiegazione
Non è che sei stata proprio chiarissima… :-S
ciao enrico
forse non centra niente con l’articolo, ma potresti dirmi il significato di questo riga di codice, grazie
<body<?php if ( is_home() ) { ?> id=”home”<?php } ?>>
antonio
Come contenuto vale anche una pagina php?
Ad esempio:
<?php if (is_home()) { ?>
<p>pagina.php</p>
<?php } elseif (is_single()) { ?>
come contenuto vale qualsiasi cosa purchè sia php valido.
Non è altro che una struttura if-else.
Nel tuo caso comunque ti ricordo che non puoi includere una pagina semplicemente scrivendola, devi utilizzare
include('nomefile.php');
Ricorda inoltre che per “pagina” intendiamo un file php contenente del codice, ma non un’intera pagina completa di header ecc, questo farebbe visualizzare in maniera orripilante la pagina ospite in quanto ci sarebbero informazioni in conflitto. Se il tuo intento è mostrare una pagina vera e propria dentro un’altra devi usare un frame o cose simili…
Ciao, è possibile concatenare due condizioni?
Mi spiego sto utilizzando il plugin Widget logic e sto provando ad inserire un valore simile
is_category(‘xxx’) && has_tag(‘YYY’)
Ho provato anche con is_tag al posto di has_tag, ma non funziona nulla. Se inserite singolarmente funzionano se concatenate non fanno nulla.
Grazie
Non conosco quel plugin, ma perchè vuoi inserire due condizioni? La condizione and è stretta e vorrebbe dire mostrare solo i post che appartengono a quella categoria ed allo stesso tempo hanno quei tag.
Ad ogni modo non esiste nè is_tag nè has_tag.
E ci va un solo &
Trovi tutto in questa pagina del manuale di wordpress: http://codex.wordpress.org/Conditional_Tags