Home » Web Development » WordPress » Ordinare i post per tassonomia in WordPress

Ordinare i post per tassonomia in WordPress

trucchi wordpress
WordPress con il suo WP_Query permette di caricare i nostri post con moltissime funzionalità, è uno strumento potentissimo e molto versatile, indispensabile da conoscere se si vuole lavorare con questo CMS.

Una delle caratteristiche che però gli manca, e che molti ricercano, è l’ordinamento dei risultati per Tassonomia. Infatti gli sviluppatori di WordPress non hanno previsto la necessità di ordinare i post, o i Custom Post Type, per la tassonomia assegnata. In rete questa funzionalità è molto discussa, soprattutto perchè molti ritengono che una richiesta simile vada a snaturare quello che sono le Tassonomie di WordPress.

Ma aldilà di queste discussioni filosofiche sul senso delle cose, è innegabile che presto o tardi vi capiterà di dover ordinare i risultati di una query fatta con il WP_Query per tassonomia e questa funzione (da copiare all’interno del functions.php del vostro tema) potrà tornarvi molto utile:

function orderby_tax_clauses( $clauses, $wp_query ) {
	global $wpdb;
	$taxonomies = get_taxonomies();
	foreach ($taxonomies as $taxonomy) {
    		if ( isset( $wp_query->query['orderby'] ) && $taxonomy == $wp_query->query['orderby']     ) {
			$clauses['join'] .=<<<SQL
				LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
				LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
				LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
			SQL;
            		$clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
            		$clauses['groupby'] = "object_id";
            		$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
            		$clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ?     'ASC' : 'DESC';
        	}
    	}
    	return $clauses;
}
 
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );

Dopo aver aggiunto questa funzione non dovrete fare altro che andare a modificare i parametri passati al WP_Query come indicato qui di seguito, ricordandoci di modificare il nome della tassonomia con quello della nostra tassonomia (taxonomy_name nell’esempio).

$args = array(
	'post_type' => 'post',
	'posts_per_page' => -1,
	'orderby' => 'taxonomy_name',
	'order' => 'ASC'
);
query_posts($args);
//	ecc... ecc...

Ovviamente questo è giusto un esempio, potrete aggiungere moltissimi altri parametri e ricercare altri Post Type, come se stessimo utilizzando il WP_Query normalmente, l’importante sarà utilizzare ‘orderby’ => ‘taxonomy_name’ tra i parametri passati.

Resta sempre aggiornato

Stai tranquillo! Non invio E-mail di Spam e non faccio decine di invi ogni settimana. Ti invierò di tanto in tanto un messaggio per tenerti aggiornato sulle novità e sui nuovi articoli!
Email
Secure and Spam free...