Ordenar entradas por Fecha (DESC) y por Título (ASC)

3 jul 2017, 01:48:30
Vistas: 40.4K
Votos: 6

Actualmente, las entradas de mi sitio web están ordenadas alfabéticamente por título:

/* Ordenar Entradas Alfabéticamente */
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' );

Ahora, quiero ordenar las entradas alfabéticamente por título (ascendente), pero también por fecha (descendente).

Como en este ejemplo:

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

Cambiar el parámetro orderby a $query->set( 'orderby', 'date title' ); no resuelve mi problema porque necesito mostrar primero las entradas más recientes.

Agradecería cualquier otra idea.

0
Todas las respuestas a la pregunta 1
3
10

Puedes pasar un array a la query como muestra el siguiente ejemplo descrito en el Codex:

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

$query = new WP_Query( $args );

En tu caso sería algo así:

/* Ordenar posts alfabéticamente */
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 deseas que post_date sea el filtro principal, debes cambiar su posición en el array. Ahora el código consultará todos los posts alfabéticamente comenzando por el post_date más reciente.

3 jul 2017 02:06:25
Comentarios

Mejoré el código, mira ahora si te funciona

Cesar Henrique Damascena Cesar Henrique Damascena
3 jul 2017 02:52:05

Sí colega, estaba por escribir una respuesta diciendo que puse el post_date primero en tu código y funcionó, pero cambiaste tu respuesta primero. Sí, funcionó. ¡Muchas gracias!

drabello drabello
3 jul 2017 02:57:36

Me alegra que te haya funcionado :D, si puedes por favor márcalo como la respuesta correcta o publica tu respuesta, ayudará a otras personas con la misma pregunta, ¡gracias!

Cesar Henrique Damascena Cesar Henrique Damascena
3 jul 2017 03:02:34