Cum să faci un wp_query folosind "BETWEEN" cu două meta_values?
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'
)
)
);

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

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

@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, 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..

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

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!

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

Î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
