Múltiples campos personalizados para 'orderby' en 'WP_Query'

20 dic 2016, 23:09:29
Vistas: 16.9K
Votos: 6

Estoy intentando ordenar publicaciones del blog primero por 'ciudad' y luego por 'nombre_calle' dentro de cada ciudad. No logro que el 'nombre_calle' se muestre en orden alfabético. Estoy usando WP_Query:

<?php
$args = array(
    'post_type' => 'property',
    'meta_query' => array(
        array(
            'relation' => 'AND',
            array(
                'meta_key' => 'city',
                'orderby' => 'meta_value', 
                'order' => 'ASC'
            ),
            array(
                'meta_key' => 'street_name',
                'orderby' => 'meta_value',
                'order' => 'ASC'
            ),
        )
    )
);
?>

¿Alguna idea?

0
Todas las respuestas a la pregunta 4
2

meta_query y orderby son parámetros separados, simplemente los colocas juntos en un array. Tendrás que hacer uno primero y luego el otro.

Por ejemplo:

<?php
$args = array(
    'post_type'     => 'property',
    'meta_query'    => array(
        array(
            'relation' => 'AND',
            'city_clause' => array(
                'key'       => 'city',
                'compare'   => 'EXISTS',
            ),
            'street_clause' => array(
                'key'       => 'street_name',
                'compare'   => 'EXISTS',
            ),
        )
    ),
    'orderby' => array(
        'city_clause'       => 'desc',
        'street_clause'     => 'desc',
    )
);
?>

https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters

21 dic 2016 01:46:23
Comentarios

¡Gracias @Nath! Lo intenté pero todavía no logro que el nombre de la calle se ordene alfabéticamente...

bhood bhood
21 dic 2016 15:43:30

@bhood Vale, he actualizado mi respuesta para usar índices de array explícitos que son referenciados por el parámetro orderby. Prueba a ver si funciona.

ngearing ngearing
22 dic 2016 01:05:12
1

Me tomó un tiempo descubrir cómo ordenar por valores numéricos con múltiples meta keys, ya que no puedes simplemente usar orderby meta_value_num. En su lugar, debes establecer el tipo como numérico en la meta query. Este es un código funcional en producción.

    $meta_query = array(
        'relation' => 'AND',
        'query_one' => array(
            'key' => '_rama_ads_type'
        ),
        'query_two' => array(
            'key' => '_rama_ads_order',
            'type' => 'NUMERIC',
        ),
    );

    $order_by = array(
        'query_one' => 'ASC',
        'query_two' => 'DESC',
    );

    $query->set( 'meta_query', $meta_query );
    $query->set( 'orderby', $order_by );
4 abr 2020 05:38:39
Comentarios

Muchas gracias. Seguía intentando con meta_type y en realidad solo necesitaba type

Jacob Raccuia Jacob Raccuia
21 may 2024 23:42:05
0

Necesitas ordenar por cláusulas específicas para meta_query.

Este enlace debería cubrir todo lo necesario para ayudarte a resolver la sintaxis y hacerlo funcionar.

https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

21 dic 2016 18:56:38
2
-3

Prueba esto, podría ayudarte.

<?php
$args = array(
'post_type'  => 'Sports',
'meta_query' => array(
    array(
        'key'     => 'league_count',
                    'orderby' => 'meta_value_num', /* usa esto solo 
                             si la clave almacena números, de lo contrario usa 'meta_value' */
                    'order' => 'ASC'
    ),
    array(
        'key'     => 'matches_count',
                    'orderby' => 'meta_value_num',
                    'order' => 'ASC'
    ),
),
);
$query = new WP_Query( $args );
?>
1 jun 2018 15:09:57
Comentarios

meta_query no soporta argumentos orderby de esta manera.

Jacob Peattie Jacob Peattie
1 jun 2018 17:05:20

Por favor, [edita] tu respuesta y añade una explicación: ¿por qué eso podría resolver el problema?

fuxia fuxia
1 jun 2018 19:00:19