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.