Ordinamento multiplo per campi personalizzati con 'orderby' in 'WP_Query'

20 dic 2016, 23:09:29
Visualizzazioni: 16.9K
Voti: 6

Sto cercando di ordinare gli articoli del blog prima per 'città' e poi per 'nome_via' all'interno di ogni città. Non riesco a far funzionare l'ordinamento alfabetico per 'nome_via'. Sto 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'
            ),
        )
    )
);
?>

Qualche idea?

0
Tutte le risposte alla domanda 4
2

meta_query e orderby sono parametri separati, devi semplicemente combinarli in un array. Dovrai gestirli uno dopo l'altro.

Ad esempio:

<?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
Commenti

Grazie @Nath! Ho provato questo metodo ma non riesco ancora a far ordinare il nome della via in ordine alfabetico...

bhood bhood
21 dic 2016 15:43:30

@bhood Ok ho aggiornato la mia risposta per utilizzare indici di array espliciti a cui fa riferimento il parametro orderby. Prova a vedere se funziona.

ngearing ngearing
22 dic 2016 01:05:12
1

Mi ci è voluto un po' per capire come ordinare per valori numerici con più meta key, dato che non puoi semplicemente usare orderby meta_value_num. Invece devi impostare il tipo su numeric nella meta query. Questo è codice funzionante in produzione.

    $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 apr 2020 05:38:39
Commenti

Molte grazie. Continuavo a provare meta_type e invece avevo bisogno solo di type

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

È necessario ordinare in base a clausole specifiche per meta_query.

Questo link dovrebbe coprire tutto ciò che ti serve per comprendere la sintassi e farlo funzionare.

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

Prova questo, potrebbe aiutare.

<?php
$args = array(
'post_type'  => 'Sports', // Tipo di post
'meta_query' => array(
    array(
        'key'     => 'league_count', // Chiave meta
                    'orderby' => 'meta_value_num', /* usa questo solo 
                             se la chiave memorizza un numero altrimenti usa 'meta_value' */
                    'order' => 'ASC' // Ordine crescente
    ),
    array(
        'key'     => 'matches_count', // Chiave meta
                    'orderby' => 'meta_value_num', // Ordina per valore numerico
                    'order' => 'ASC' // Ordine crescente
    ),
),
);
$query = new WP_Query( $args ); // Esegui la query
?>
1 giu 2018 15:09:57
Commenti

meta_query non supporta argomenti orderby in questo modo.

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

Per favore [modifica] la tua risposta, e aggiungi una spiegazione: perché questa soluzione potrebbe risolvere il problema?

fuxia fuxia
1 giu 2018 19:00:19