web-dev-qa-db-fra.com

Trier les messages par date (DESC) et par titre (ASC)

Actuellement, les articles de mon site Web sont classés par ordre alphabétique par titre:

/* Order Posts Alphabetically */
function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {
    $query->set( 'orderby', 'title' );
    $query->set( 'order', 'ASC' );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

Maintenant, je veux trier les articles alphabétiquement par titre (croissant), mais aussi par date (décroissant).

Comme cet exemple:

  • AUDI A1 Ambition 1.4 (publié le 01/01/17)
  • AUDI A1 Ambition 1.4 (publié le 01/01/16)
  • AUDI A1 Ambition 1.4 (publié le 01/01/15)
  • BMW 120i Active Flex 2.0 (publié le 01/01/17)
  • BMW 120i Active Flex 2.0 (publié le 01/01/16)
  • BMW 120i Active Flex 2.0 (publié le 01/01/15)
  • Citroen ...

Changer le paramètre orderby en $query->set( 'orderby', 'date title' ); ne résout pas mon problème, car je dois d'abord afficher les publications les plus récentes.

J'apprécierais toutes les autres idées.

3
drabello

Vous pouvez passer un tableau à query comme dans l'exemple suivant décrit dans le Codex shows:

$args = array(
'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
);

$query = new WP_Query( $args );

Dans votre cas, cela ressemblera à ceci:

/* Order Posts Alphabetically */
function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {

    $args =  array( 'post_date' => 'DESC', 'title' => 'ASC' );

    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

Si vous voulez que post_date soit utilisé comme filtre principal, vous devez modifier sa position dans le tableau. Le code interroge désormais tous les articles dans l'ordre alphabétique, en commençant par le plus récent, post_date.