Cum să faci un wp_query folosind "BETWEEN" cu două meta_values?

30 oct. 2013, 20:21:36
Vizualizări: 21.1K
Voturi: 6

Sunt începător în WordPress și am reușit să fac câteva interogări, dar aceasta... of! Îmi dă bătăi de cap!

Ceea ce vreau să fac este această parte din interogare:

" ... WHERE "VALOAREA_PE_CARE_O_VREAU" BETWEEN event_start_date AND event_end_date ..."

Unde "event_start_date" și "event_end_date" sunt chei meta (vreau să folosesc valorile lor, nu pe ale mele!)

Până acum am ajuns la următorul cod:

$tEA = array(
    'post_type' => 'event',
    'meta_key' => $metaKey,
    'orderby' => 'meta_value',
    'order' => $order,
    'posts_per_page' => $postPerPage,
    'meta_query' => array(
        array(
            'key' => $metaKey,
            'value' => $today,
            'compare' => "=",
            'type' => 'DATE'
        ),
        array(
            'key' => '_event_end_time'
        )
    )
);
0
Toate răspunsurile la întrebare 3
4

Aceasta ar trebui să funcționeze pentru tine:

$tEA = array(
    'post_type' => 'event',
    // nu ai nevoie de meta_key deoarece folosești meta_query
    //'meta_key' => $metaKey,
    'orderby' => 'meta_value',
    'order' => $order,
    'posts_per_page' => $postPerPage,
    'meta_query' => array(
        array(
            'key' => $metaKey,
            // valoarea ar trebui să fie un array de (lower, higher) cu BETWEEN
            'value' => array('START_DATE', 'END_DATE'),
            'compare' => 'BETWEEN',
            'type' => 'DATE'
        ),
    )
);

Reține că START_DATE și END_DATE ar trebui să fie în formatul de dată MySQL YYYY-MM-DD

30 oct. 2013 21:27:19
Comentarii

+1 dar sunt destul de sigur că timestamp-urile UNIX sunt perfect acceptabile.

kaiser kaiser
31 oct. 2013 02:32:55

@kaiser Mulțumesc, dar deoarece tipul de date este convertit la DATE, nu sunt sigur dacă WP îl va formata corect în timpul construcției meta_query, așa că este mai sigur să folosești direct formatul de dată MySQL în acest caz.

Ahmad M Ahmad M
31 oct. 2013 12:54:40

Ahmad, mulțumesc pentru răspuns, dar în problema mea 'START_DATE' și 'END_DATE' ar trebui să fie meta_value pentru aceste câmpuri. Am un eveniment care are "_event_start_date" și "_event_end_date", și acestea sunt meta_keys.

Ceea ce vreau să fac este să folosesc "BETWEEN" cu aceste două meta_values. Nu vreau să introduc manual valorile, deoarece aceste valori sunt meta_values.

Hehe..

Hor Hor
31 oct. 2013 18:35:33

Dacă fac ce spui, uită ce afișează interogarea: "BETWEEN '_event_start_date' AND '_event_end_date')"

Hor Hor
31 oct. 2013 18:39:02
3

Nu l-am testat, dar ce zici de asta?

$tEA = array(
    'post_type' => 'event', // tipul postării
    'meta_key' => $metaKey, // cheia meta
    'orderby' => 'meta_value', // ordonare după valoarea meta
    'order' => $order, // ordinea
    'posts_per_page' => $postPerPage, // numărul de postări pe pagină
    'meta_query' => array( // interogare meta
        array(
            'key' => 'event_start_date', // cheia pentru data de început
            'value' => 'VALUE_THAT_I_WANT', // valoarea dorită
            'compare' => '>=' // comparație
        ),
        array(
            'key' => 'event_end_date', // cheia pentru data de sfârșit
            'value' => 'VALUE_THAT_I_WANT', // valoarea dorită
            'compare' => '<=' // comparație
        ),
        array(
            'key' => '_event_end_time' // cheia pentru ora de sfârșit
        )
    )
);

Nu sunt sigur dacă aveai nevoie și de cealaltă comparație, dacă da, doar adaug-o :P

30 oct. 2013 20:31:54
Comentarii

teoretic ar trebui să funcționeze.. dar nu merge =( Încerc să repar asta. Dacă știe cineva cum se face, vă rog, nu ezitați să postați!

Hor Hor
30 oct. 2013 21:06:01

ai încercat doar cu array-ul event_start_date? De ce nu merge? (fără rezultate?)

Toni Michel Caubet Toni Michel Caubet
30 oct. 2013 21:18:08

Da, fără rezultate. Despre asta vorbesc, teoretic, ar trebui să meargă.. dar nu merge! hehe!

Hor Hor
31 oct. 2013 18:36:42
1
-1

Începând cu WP 3.7, puteți transmite 'date_query' ca argument.

Exemplu care returnează postări din perioada 1 ianuarie - 28 februarie:

$args = array(
    'date_query' => array(
        array(
            'after'     => 'January 1st, 2013',
            'before'    => array(
                'year'  => 2013,
                'month' => 2,
                'day'   => 28,
            ),
            'inclusive' => true,
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args );

Cod preluat de pe https://codex.wordpress.org/Class_Reference/WP_Query

27 sept. 2017 14:38:36
Comentarii

Întrebarea se referă la utilizarea datelor în metadate, nu la câmpul de dată din tabelul de articole.

Milo Milo
27 sept. 2017 18:23:41