WordPress. Trier une requête selon deux champs

WordPress. Trier une requête selon deux champsProblématique

Vous souhaitez ordonner vos posts selon deux champs conjugués. Dans l’exemple qui me préoccupait, il s’agissait de trier par post_date DESC puis par post_modified DESC. Prenons donc cet exemple.

Le Codex WordPress vous indique ici la manière suivante :

Multiple ‘orderby’ values
Display pages ordered by ‘title’ and ‘menu_order’. (title is dominant):

$query = new WP_Query( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' )

(sachant qu’il trie dans ce cas d’abord par ‘title’ puis ‘par menu_order’)

Je m’y suis peut-être mal pris en écrivant :

'orderby' => 'post_date modified', 'order' => 'DESC'

Mais le fait est que ça n’a pas fonctionné. En outre, on ne peut pas appliquer, par exemple, un ordre ASC à la première clef et un DESC à la seconde. Et une longue exploration m’a montré que je ne suis pas le seul à m’être cassé les dents là-dessus. Mais pas pour longtemps : têtu je suis, jeune padawan !

Solution

WordPress propose toujours des solutions. Mais il faut les trouver. En l’occurrence, il faut ajouter un filtre post_orderby (voir le codex WordPress ici) avant le query_posts($args) de la manière suivante :

add_filter(‘posts_orderby’, ‘my_posts_orderby’);
function my_posts_orderby($orderby_statement) {
$orderby_statement = « post_date DESC, post_modified DESC »;
return $orderby_statement;
}

Inutile évidemment dans ce cas de préciser dans la déclaration du $args, le classique ‘orderby’ => … et le ‘order’ => …

Et ne pas oublier le moment venu (après le query_args par exemple …) le :

add_filter(‘posts_orderby’, ‘my_posts_orderby’);

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Pour en savoir plus, quelques livres sur WordPress 

Laisser un commentaire