Tutorial: lista taxonomy terms

In WordPress capita moltissime volte la necessità di mostrare la lista delle tassonomie (taxonomy terms). Chissà quante volte avrete avuto bisogno di mostrare una semplice lista delle categorie dei post e sarete andati a cercare …

taxonomy terms

In WordPress capita moltissime volte la necessità di mostrare la lista delle tassonomie (taxonomy terms).

Chissà quante volte avrete avuto bisogno di mostrare una semplice lista delle categorie dei post e sarete andati a cercare plugin vari per farlo.

Vediamo come è possibile mostrare la taxonomy terms nel nostro template WordPress con un breve snippet di codice, con il quale, volendo possiamo anche metterla in ordine a piacere

Cominciamo col riportare uno snippet di codice, sotto, che produrrà un elenco di nomi di termini (taxonomy terms) collegati agli archivi corrispondenti e magari anche il numero di post in quel termine della tassonomia specificata.

<?php
$terms = get_terms( array(
	'taxonomy' => 'product_cat', // set your taxonomy here
	'hide_empty' => false, // default: true
) );

if ( empty( $terms ) || is_wp_error( $terms ) ) {
	return;
}

echo '<ul>';

foreach( $terms as $term ) {
	printf(
		'<li><a href="%s">%s</a> <span class="term-count">(%s)</span></li>',
		esc_url( get_term_link( $term ) ),
		esc_attr( $term->name ),
		$term->count
	);
}

echo '</ul>';

?>

Vediamo come funziona questo codice. Per prima cosa forniamo un array di parametri alla funzione predefinita di WordPress get_terms(), che andiamo ad usare per il nostro scopo.

In pratica questa funzione molto funzionale (scusate il gioco di parole), recupera tutti i termini in una data tassonomia o elenco di tassonomie, per capirci se fossero delle categorie di articoli recupererebbe tutte le categorie di articoli.

Infatti, guarda caso, il primo parametro fornito alla funzione è la tassonomia ‘product_cat’, ma ovviamente sostituendolo con la vostra tassonomia recupererete la vostra particolare lista.

Dopo di che indichiamo come secondo parametro ‘hide_empty’ false‘, ovvero mostraci anche le categorie vuote, infatti di default il suo valore è ‘true‘.

E di default i valori della lista che ci verrà mostrata sono in ordine ascendente.

Se volete conoscere i valori che è possibile passare all’array della funzione get_terms() e le loro impostazioni di default sono questi:

$get_terms_default_attributes = array (
			'taxonomy' => 'category', //empty string(''), false, 0 don't work, and return empty array
			'orderby' => 'name',
			'order' => 'ASC',
			'hide_empty' => true, //can be 1, '1' too
			'include' => 'all', //empty string(''), false, 0 don't work, and return empty array
			'exclude' => 'all', //empty string(''), false, 0 don't work, and return empty array
			'exclude_tree' => 'all', //empty string(''), false, 0 don't work, and return empty array
			'number' => false, //can be 0, '0', '' too
			'offset' => '',
			'fields' => 'all',
			'name' => '',
			'slug' => '',
			'hierarchical' => true, //can be 1, '1' too
			'search' => '',
			'name__like' => '',
			'description__like' => '',
			'pad_counts' => false, //can be 0, '0', '' too
			'get' => '',
			'child_of' => false, //can be 0, '0', '' too
			'childless' => false,
			'cache_domain' => 'core',
			'update_term_meta_cache' => true, //can be 1, '1' too
			'meta_query' => '',
			'meta_key' => array(),
			'meta_value'=> '',
	);

Poi nel nostro snippet di codice non facciamo altro che usare un ciclo foreach per creare una lista html contenente il nome della tassonomia e un valore (count) del numero di post o custom post appartenenti a quella tassonomia.

Se poi volessimo mostrare la lista ordinata in altro modo, ad esempio per ID in ordine discendente, quello che dobbiamo fare è modificare la parte in cui si fornisce l’array a get_terms() in questo modo:

$terms = get_terms( array(
	'taxonomy' => 'product_cat',
	'orderby' => 'ID', // default: 'orderby' => 'name',
	'order' => 'DESC',
	'hide_empty' => false, // default: true
) );

Un’altra interessante opzione che potrebbe servire in caso la nostra lista fosse composta di un gran numero di categorie con molti sottolivelli, è quella di mostrare solo il livello principale, nel qual caso bisogna fornire all’array il parametro ‘parent’ in questo modo:

$terms = get_terms( array( 
    'taxonomy' => 'product_cat',
    'parent'   => 0
) );

Sempre nel caso di molte categorie con diversi sottolivelli al contrario magari vogliamo mostrare i sottolivelli e magari vogliamo anche mostrare il tutto in un campo select di un form ed in questo caso il recupero è un po’ più complicato quindi dobbiamo ricorrere a più cicli foreach come in questo snippet di codice:

$taxonomies = get_terms( array(
	'taxonomy' => 'product_cat',
	'hide_empty' => false
) );

if ( !empty($taxonomies) ) :
	$output = '<select>';
	foreach( $taxonomies as $category ) {
		if( $category->parent == 0 ) {
			$output.= '<optgroup label="'. esc_attr( $category->name ) .'">';
			foreach( $taxonomies as $subcategory ) {
				if($subcategory->parent == $category->term_id) {
				$output.= '<option value="'. esc_attr( $subcategory->term_id ) .'">
					'. esc_html( $subcategory->name ) .'</option>';
				}
			}
			$output.='</optgroup>';
		}
	}
	$output.='</select>';
	echo $output;
endif;

Lascia un commento