Ordonarea setului de articole dupa mai multe campuri custom

By

Traian

Blog IT, MySQL, PHP, Wordpress

Salut!

In documentatia WordPress pentru WP_Query gasim sintaxa pentru ordonarea setului de articole dupa un camp custom (prezent in tabelul post_meta) asociat fiecarui articol.

$args = array(
'post_type' => 'product',
'orderby' => 'meta_value_num',
'meta_key' => 'price',
);
$query = new WP_Query( $args );

Exista situatii in care setul de articole va trebui ordonat dupa mai multe campuri custom. Un exemplu este dat de un set de articole cu un tip de post custom “eveniment” care are 3 campuri custom: zi, luna si an. Am dori ordonarea articolelor “eveniment” in ordinea descrescatoare a datei evenimentului, data construita prin cele 3 campuri zi, luna, an din tabelul post_meta.

Pentru asta avem de modificat query-ul principal, adaugand in elementul meta_query pe langa campul principal (anul) si celelate doua campuri – luna si zi.

$args['post_type'] = 'event';
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = 'core_event_year';
$args['meta_query'] = array(
'relation' => 'AND',
array( 'key' => 'core_event_year', 'compare' => 'EXISTS' ),
array( 'key' => 'core_event_month', 'compare' => 'EXISTS' ),
array( 'key' => 'core_event_day', 'compare' => 'EXISTS' )
);

Inainte de rula query-ul, vom modifica clauza order by pentru acest query astfel:

add_filter('posts_orderby', 'sweb_ordonare_multipla_dupa_campuri_meta');
function sweb_ordonare_multipla_dupa_campuri_meta($orderby){
if (!is_admin() && is_main_query() && is_page('noutati-si-evenimente')){
global $wpdb;
$orderby = 'mt1.meta_value+0 DESC, mt2.meta_value+0 DESC, mt3.meta_value+0 DESC';
}
return $orderby;
}

Urmeaza sa se elimine acest filtru dupa rularea query-ului (pentru a nu modifica clauza order by si la query-urile care se vor mai rula in pagina):

$wp_query = new WP_Query($args);
remove_filter('posts_orderby', 'sweb_ordonare_multipla_dupa_campuri_meta');

Concluzie: se pot ordona articole dupa 1, 2, 3, sau mai multe campuri custom asociate articolelor.

Este o facilitate foarte interesanta si generoasa a WordPress care permite programatorului sa manipuleze query-ul inainte de rulare, astfel incat sa obtina o ordonare corespunzatoare cerintelor de continut.

Etichete

 

Comments are closed.