Cómo ordenar el resultado de wp_query

3 minutos de lectura

avatar de usuario
Juan M.González R.

Estoy tratando de ordenar los resultados de wp_query, quiero ordenarlos por diferentes parámetros sin volver a realizar la consulta. tengo algo asi:

$the_query = new WP_Query( $args );

Y quiero ordenar $the_query, WP_Query devuelve una estructura como esa:

$the_query->posts[0]->title; 

Entonces, quiero ordenar todos los elementos por ‘título’, por ejemplo. Intenté esto:

usort($the_query->posts, function($a, $b) {
   return $a['title'] - $b['title'];
});

Quiero ordenar después de hacer la consulta. Es porque quiero ordenar muchas veces y no quiero hacer la consulta cada vez que quiero ordenar

SOLUCIÓN

Esto devuelve un error fatal: no se puede usar el objeto de tipo WP_Post como matriz

usort($the_query->posts, function($a, $b) {
   return $a['title'] - $b['title'];
});

Esto se debe a que la estructura de la matriz es así:

$the_query->posts[0]->title; 

así que tienes que cambiar $a['title'] - $b['title'] por $a->title - $b->title
y usando la respuesta de Pieter Goosen el resultado final es:

usort($the_query->posts, function($a, $b) {
    return strcasecmp( 
            $a->title, 
            $b->title
        );
});

Gracias por todo

  • +1 por el excelente formato limpio de su pregunta 🙂

    – Pieter Goosen

    15 de noviembre de 2014 a las 7:25

avatar de usuario
Pieter Goosen

mira el orderby y order parámetros en WP_Query. Si necesita ordenar por título de publicación, puede agregar lo siguiente a sus parámetros de consulta

'orderby' => 'title'
'order' => 'ASC'

EDITAR

Si necesita ordenar con usortpuedes hacer lo siguiente

usort($the_query->posts, function($a, $b) {
   return strcasecmp( 
                $a->post_title, 
                $b->post_title 
            );
});

  • Eso funciona, pero quiero ordenar después de hacer la consulta, quiero decir que tengo $consulta = new WP_Query($args) quiero ordenar $consulta. Es porque quiero hacer eso muchas veces y no quiero hacer la consulta cada vez que quiero ordenar

    – Juan M. González R.

    15 de noviembre de 2014 a las 7:33

  • devuelve un error fatal: no se puede usar el objeto de tipo WP_Post como matriz

    – Juan M. González R.

    15 de noviembre de 2014 a las 7:43

  • Genial, esa es la solución que he conseguido.

    – Juan M. González R.

    15 de noviembre de 2014 a las 7:54

WP_Query(‘pedido por=fecha&pedido=DESC’)

O intente esto, si desea ordenar según el valor meta personalizado.

$args = array(
        'post_type' => 'post',
        'meta_key' => 'pb_issue_featured',
        'orderby'   => 'meta_value',
        'order' => 'DESC',
        'posts_per_page' => $posts,
        'paged' => $paged,
        'paged' => 1,
        'meta_query' => array(
            array(
                'key' => 'headline',
                'value' => 1,
                'compare' => '!=' 
                )
            )
        );

add_filter( 'posts_orderby', 'filter_query' );
$q = new WP_Query($args);
remove_filter( 'posts_orderby', 'filter_query' );

function filter_query( $query ) {
    $query .= ', wp_posts.menu_order ASC';
    return $query;
}

  • Su respuesta no tiene relevancia para la pregunta. Además, ¿por qué estás usando un filtro personalizado para ordenar cuando ya tienes esa funcionalidad integrada?

    – Pieter Goosen

    15 de noviembre de 2014 a las 7:24

  • Ok, entiendo eso, pero quiero ordenar después de hacer la consulta, quiero decir que tengo $consulta = new WP_Query($args) quiero ordenar $consulta. Es porque quiero hacer eso muchas veces y no quiero hacer la consulta cada vez que quiero ordenar con el parámetro “x”

    – Juan M. González R.

    15 de noviembre de 2014 a las 7:30

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad