Ordonare după chei și valori meta multiple

16 nov. 2016, 11:20:53
Vizualizări: 43.6K
Voturi: 23

Cum pot seta ordonarea după mai multe chei meta în funcție de valorile meta, poate cineva să-mi dea un exemplu?

2
Comentarii

Bun venit pe WPSE - pentru a vă putea ajuta, avem nevoie de ajutorul vostru. Puteți descrie mai în detaliu ce încercați să faceți și eventual să postați niște exemple de cod?

TheDeadMedic TheDeadMedic
16 nov. 2016 11:44:21

Nu înțeleg de ce a fost închis sau s-a cerut mai multe informații, acest lucru este foarte simplu, clar și cu etichetele corecte...

jave.web jave.web
10 iun. 2021 13:07:09
Toate răspunsurile la întrebare 1
5
49

meta_query este un array de clauze meta. De exemplu:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
) );

Puteți folosi un array asociativ, cu o cheie pentru fiecare clauză meta:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
) );

Apoi, puteți folosi acele chei în argumentul order_by, cu una:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => 'city_clause', // Rezultatele vor fi ordonate după valorile meta 'city'.
) );

Sau mai multe clauze:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => array( 
        'city_clause' => 'ASC',
        'state_clause' => 'DESC',
    ),
) );

Exemplu preluat din acest articol de pe blogul Make WordPress Core.

16 nov. 2016 11:45:28
Comentarii

nu uita să adaugi tipul cheii/valorii meta. Acest lucru va afecta rezultatele. În mod implicit, WordPress va trata meta-ul ca un șir de caractere.

Alexander Ivashchenko Alexander Ivashchenko
12 dec. 2018 13:54:03

Dar dacă nu vreau să returnez doar rezultatele unde statul este Wisconsin? Vreau să returnez toate statele și vreau rânduri unde poate exista sau nu un oraș, dar totuși să ordonez după acele 2 câmpuri. De exemplu, fără nicio clauză WHERE - doar un ORDER BY.

Felix Eve Felix Eve
9 mai 2019 12:40:14

Felix, cu aceste cerințe, o soluție ar putea fi să incluzi o clauză finală de 'prindere a tuturor' în meta_query-ul tău și să o pui ultima în instrucțiunea ta orderby. Astfel, primele câteva clauze din meta_query-ul tău ar obține rezultatele specifice pe care vrei să le ordonezi mai întâi. Apoi ultima ta clauză ar fi tot ce nu se potrivește cu clauzele anterioare.

Matt Keys Matt Keys
2 oct. 2020 22:30:13

EXISTS este o metodă excelentă pentru a obține o interogare complexă de metadate denumită, dar în același timp să nu filtrezi după valoare :) Apropo: am avut un caz real - cererea a fost să ordonăm evenimentele după dată DESC dar timp ASC folosind un singur câmp de dată&timp. Am folosit documentația și acest răspuns pentru a construi asta: https://ideone.com/RUoyZs :-)

jave.web jave.web
10 iun. 2021 14:23:17

Wow, acest lucru este foarte interesant

user2128576 user2128576
5 mar. 2022 09:00:37