Cómo ordenar WP_Query por múltiples meta keys y campos personalizados

28 ago 2017, 16:38:17
Vistas: 18.7K
Votos: 8

¿Cómo ordenar una consulta por múltiples meta keys y campos personalizados?

Este es mi código:

$args = array
    (
        'post_type' => 'listing',
        'posts_per_page' => -1,
        'tax_query' => array
        (
            array
            (
                'taxonomy' => 'listing_category',
                'field' => 'slug',
                'terms' => urldecode($category)
            ),
            array
            (
                'taxonomy' => 'location',
                'field' => 'slug',
                'terms' => urldecode($location)
            )
        ),

        //*** ESTO NO FUNCIONA
        'meta_query'    => array
        (
            array(
                'key'     => 'listing_status',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'listing_total_rank',
                'orderby' => 'meta_value',
                'order' => DESC,
            ),
            array(
                'key'     => 'listing_free_date',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'title',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
        ),
        //***
    );

$listings = new WP_Query( $args );

La parte del 'meta_query' no funciona en el código.

1
Comentarios

Quisiera señalar que esta consulta va a ser bastante lenta/costosa

Tom J Nowell Tom J Nowell
28 ago 2017 17:56:45
Todas las respuestas a la pregunta 1
0
19

Estás utilizando una consulta de metadatos sin establecer un valor. La forma en que lo estás haciendo se usa para consultar publicaciones, no para ordenarlas.

Usando Consultas de Metadatos con Nombre

Para ordenar tus publicaciones por diferentes metadatos, puedes asignar un nombre a tus consultas de metadatos y luego usarlo para establecer el orden. Aquí tienes un ejemplo sencillo:

$args = array(
    'meta_query' => array(
        'relation' => 'AND',
        'query_one' => array(
            'key' => 'key_one',
            'value' => 'value_one', // Opcional
        ),
        'query_two' => array(
            'key' => 'key_two',
            'compare' => 'EXISTS', // Opcional
        ), 
    ),
    'orderby' => array( 
        'query_one' => 'ASC',
        'query_two' => 'DESC',
    ),
);

Puedes revisar esta sección de la página del codex para WP_Query() para familiarizarte con el ordenamiento de publicaciones.

28 ago 2017 17:04:13