Ordenar entradas por Fecha (DESC) y por Título (ASC)
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.
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.

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!
