Comment afficher les articles de type personnalisé 'Event' classés par 'Start_Hour' puis par 'Start_Minute'?
'Start_Hour' et 'Start_Minute' sont des champs personnalisés numériques.
J'ai essayé ça, mais ça ne marche pas:
$args = array(
'post_type'=>'Events',
'orderby' => 'meta_value',
'meta_key' => 'Start_Hour Start_Minute',
'order' => 'ASC'
);
$loop = new WP_Query( $args );
Merci à Bainternet J'ai trouvé la solution:
function orderbyreplace($orderby) {
return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby);
}
et...
$args = array(
'post_type'=>'Events',
'orderby' => 'menu_order',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'Start_Hour',
'value' => '',
'compare' => 'LIKE'
),
array(
'key' => 'Start_Minute',
'value' => '',
'compare' => 'LIKE'
)
)
);
lorsque vous utilisez 'meta_key' => 'Start_Hour Start_Minute'
, la requête recherche alors les publications avec un champ personnalisé nommé Start_Hour Start_Minute
. C'est pourquoi il ne fonctionne pas pour vous.
Mais il existe un moyen de commander par plusieurs champs personnalisés en utilisant le crochet de filtre posts_orderby
. Commencez par créer une fonction qui ajoutera vos champs orderby de la manière suivante:
function orderbyreplace($orderby ) {
global $wpdb;
return str_replace($wpdb->prefix.'postmeta.meta_value', 'mt1.meta_value, mt2.meta_value ASC', $orderby);
}
puis définissez vos arguments comme suit:
$args = array(
'post_type'=>'Events',
'orderby' => 'meta_value',
'meta_key' => 'Start_Hour',
'meta_query' => array(
array(
'key' => 'Start_Hour',
'value' => '0',
'type' => 'NUMERIC',
'compare' => '!='
),
array(
'key' => 'Start_Minute',
'value' => '0',
'type' => 'NUMERIC',
'compare' => '!='
)
)
);
Voyez comment j'utilise la meta_query qui joindra les deux champs personnalisés et qu'il ne restera plus qu'à accrocher votre fonction orderbyreplace juste avant votre requête:
add_filter('posts_orderby','orderbyreplace');
$loop = new WP_Query( $args );
remove_filter('posts_orderby','orderbyreplace');