I tag condizionali (conditional tags) sono delle funzioni di WordPress che restituiscono un valore booleano (true o false ) a seconda del risultato della verifica effettuata. Tale verifica può essere effettuata su ogni componente o sezione di WordPress. In questo articolo vedremo i tag condizionali più utilizzati.
is_home()
La condizione è vera se si sta visualizzando la home page del sito. Se la pagina principale è una pagina statica occorre invece usare is_front_page()
(vedi di seguito).
is_front_page()
La condizione è vera se si sta visualizzando la home page del sito e se la home page è una pagina statica.
In pratica possiamo combinare le due funzioni in modo da selezionare sempre la home page:
if( is_home() || is_front_page() ) { ... }
is_admin()
La condizione è vera quando viene visualizzata la sezione amministrativa di WordPress, ossia in /wp-admin
.
is_single()
La condizione è vera quando si visualizza un post singolo. Esempi:
is_single( 17 )
true quando il post ha come ID 17.
is_single( 'Test' )
true quando il post ha come titolo "Test".
is_single( 'test-slug' )
true quando il post ha come slug (abbreviazione) "test-slug".
is_single( array( 17, 'test-slug', 'Test' ) )
true quando il post ha come ID 17 o come slug "test-slug" o come titolo "Test".
is_single( array( 17, 19, 1, 11 ) )
true quando il post ha come ID uno dei valori indicati nell'array.
is_single( array( 'test-slug', 'slug', 'slug-2' ) )
true quando il post ha come slug uno dei valori indicati nell'array.
is_single( array( 'Test', 'Test 2', 'Test 3' ) )
true quando il post ha come titolo uno dei valori indicati nell'array.
is_sticky()
La condizione è vera quando un post è stato marcato come "in evidenza" nel Loop. Questa funzione in genere viene usata nel Loop ed in quel caso l'argomento predefinito è l'ID del post corrente.
Se invece viene usata fuori dal Loop occorre sempre specificare come argomento l'ID del post sul quale effettuare la verifica.
is_page()
La condizione è vera quando si visualizza una pagina. La sintassi e gli esempi per questa funzione sono gli stessi della funzione is_single()
.
Attenzione: non esiste ancora in WordPress una funzione per stabilire se una pagina è discendente (figlia) di un'altra, ossia se è una sottopagina.
La soluzione è la seguente:
if( is_page() && $post->post_parent > 0 ) { ... }
is_category()
La condizione è vera quando si visualizza una categoria. La sintassi e gli esempi per questa funzione sono gli stessi della funzione is_single()
.
in_category()
La condizione è vera quando un post appartiene ad una determinata categoria:
in_category( 5 )
true se il post appartiene alla categoria con ID uguale a 5.
in_category( array( 2, 3, 4 ) )
true se il post appartiene alle categorie con ID uguale ai valori specificati nell'array.
is_tag()
La condizione è vera quando si visualizza l'archivio di un determinato tag.
is_tag( 'test' )
true se il tag ha come slug "test".
is_tag( array( 'test', 'test-2', 'test-3' ) )
true se il tag ha come slug uno dei valori specificati nell'array.
has_tag()
Verifica che un post abbia un determinato tag.
has_tag( 'test' )
true se il post ha "test" come tag.
has_tag( array( 'test', 'test-2', 'test-3' ) )
true se il post ha come tag uno dei valori specificati nell'array.
is_tax()
true se si sta visualizzando la pagina di archivio di una tassonomia.
is_tax( 'test' )
true se la tassonomia ha come nome "test"
is_tax( 'test', 'slug' );
true se la tassonomia test ha come slug "slug".
is_tax( 'test', array( 'test-1', 'test-2', 'test-3' ) )
true se la tassonomia test ha come slug uno dei valori specificati nell'array.
has_term()
Verifica che un post abbia determinati termini relativi alle sue tassonomie. Il secondo parametro deve essere lo slug o il nome della tassonomia di riferimento.
has_term( 'test', 'tassonomia' )
true se il post ha il termine test per la tassonomia "tassonomia".
has_term( array( 'foo', 'bar', 'baz' ), 'tassonomia' )
true se il post ha uno dei termini specificati nell'array per la tassonomia "tassonomia".
is_author()
true quando visualizziamo la pagina di archivio dei post di un autore.
is_author( 4 )
true quando l'autore ha come ID utente 4.
is_author( 'Mario' )
true quando il Nickname dell'autore è "Mario".
is_author( 'mario-rossi' )
true quando il Nicename dell'autore è "mario-rossi" (il Nicename dell'autore compare come ultima parte dell'URL della pagina autore).
is_author( array( 4, 'mario-rossi', 'Mario' ) )
true quando l'autore ha come ID utente 4 o ha come Nicename "mario-rossi" o come Nickname "Mario".
is_archive()
true quando ci troviamo in una pagina d'archivio (categoria, tag, tassonomia, autore ecc.)
is_search()
true quando stiamo visualizzando la pagina dei risultati della ricerca.
is_404()
true quando il sito ha generato una pagina di errore 404 (gestita dal file 404.php nei temi).
is_paged()
true quando una sezione presenta la paginazione dei post creata dopo un Loop.
is_main_query()
true quando il Loop creato da una query è il Loop principale del sito. Per Loop principale e query principale si intende nello specifico quello che comprende tutti i post del sito.
Un uso tipico di questo tag riguarda la creazione di filtri sui post:
function exclude_cat( $query ) {
if( !is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) ) {
$query->set( 'cat', '-5' );
}
}
add_filter( 'pre_get_posts', 'exclude_cat' );
In questo caso abbiamo rimosso la categoria con ID 5 dal Loop principale.
has_excerpt()
true quando un post ha un riassunto impostato nell'editor. La funzione usa l'ID del post corrente nel Loop, mentre fuori dal Loop accetta l'ID del post da testare.
has_post_thumbnail( $id )
true se il post il cui ID viene specificato come parametro ha un'immagine in evidenza impostata.
Esempi pratici
Fuori dal Loop
// functions.php
function add_social_media( $content ) {
$social = social_plugin();
if( is_page() ) { // qualsiasi pagina
$content = $social . $content;
}
if( is_single() ) { // qualsiasi post singolo
$content = $content . $social;
}
return $content;
}
add_filter( 'the_content', 'add_social_media' );
In questo caso abbiamo effettuato due operazioni diverse a seconda della posizione del contenuto ( in una pagina o in un post ). Se abbiamo bisogno di maggiore specificità possiamo utilizzare i parametri di queste funzioni:
// functions.php
function add_scripts() {
wp_enqueue_script( 'jquery' );
if( is_page( 8 ) ) { // pagina specifica con ID 8
wp_register_script( 'google-maps', get_template_directory_uri() . '/js/gmap.js', array( 'jquery' ), '2.0', false );
wp_enqueue_script( 'google-maps' );
}
//...
}
add_action( 'wp_enqueue_scripts', 'add_scripts' );
Nel Loop
<!-- index.php -->
<?php
while( have_posts() ) {
the_post();
$id = get_the_ID();
?>
<figure class="featured">
<?php if( has_post_thumbnail( $id ) ) {
the_post_thumbnail();
} else { ?>
<img src="http://placehold.it/400x300" alt="" />
<?php } ?>
</figure>
<?php
}
?>
In questo caso se i post non hanno un'immagine in evidenza ne impostiamo una predefinita.
Conclusione
I conditional tag si rivelano uno strumento utilissimo e fondamentale in WordPress. Senza di essi la maggior parte delle operazioni effettuate da temi e plugin non sarebbe possibile.