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.

Documentazione

Conditional Tags