meta_query pe un interval de date folosind un array de valori
Cum pot face o interogare care să returneze postarea dacă array-ul din câmpul personalizat conține o dată care se află în intervalul specificat? Interogarea de mai jos este în esență ceea ce doresc, dar nu funcționează...
// array-ul income_dates arată astfel
// a:3:{i:0;s:10:"2014-02-01";i:1;s:10:"2014-03-01";i:2;s:10:"2014-03-29";}
$today = date("Y-m-d");
$date1 = date("Y-m-d", strtotime($today . "-1 Month"));
$date2 = date("Y-m-d", strtotime($today . "+1 Month"));
$args = array(
'post_type' => 'income',
'meta_query' => array(
array(
'key' => 'income_dates',
'value' => $date1,
'type' => 'date',
'compare' => '>'
),
array(
'key' => 'income_dates',
'value' => $date2,
'type' => 'date',
'compare' => '<'
),
)
);

Am avut nevoie să obțin postările de tip eveniment cu câmpul personalizat "dată" mai târziu decât ziua de astăzi, acest exemplu de cod a funcționat perfect pentru mine, sper să ajute pe cineva într-o situație similară.
$today = date("Y-m-d");
$today1 = date("Ymd", strtotime("$today"));
$custom_meta = array(
array(
'key' => 'data_de_inicio',
'value'=>$today1,
'compare'=>'>',
'type'=>'date',
),
);
$query = new WP_Query(array(
'post_type'=>'event',
'showposts'=>'3',
'orderby'=>'meta_value',
'meta_key'=>'data_de_inicio',
'order'=>'asc',
'meta_query'=>$custom_meta,
)
);

Sugerez să nu stocați valorile meta ca array
deoarece (cred) nu este ceea ce aveți nevoie. Cred că de fapt aveți nevoie să stocați fiecare valoare meta individual cu propriul său pereche cheie/valoare și nu o singură cheie cu valori serializate. Când faceți astfel, puteți folosi comparația BETWEEN
:
$today = date("Y-m-d");
//Comparația 'BETWEEN' cu 'type' date funcționează doar cu date în format YYYYMMDD.
//Vezi http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
$date1 = date("YYYYMMDD", strtotime($today . "-1 Month"));
$date2 = date("YYYYMMDD", strtotime($today . "+1 Month"));
$args = array(
'post_type' => 'income',
'meta_query' => array(
array(
'key' => 'income_dates',
'value' => array($date1,$date2),
'type' => 'date',
'compare' => 'BETWEEN'
),
)
);

Mulțumesc pentru răspuns și da, asta ar funcționa, dar aș prefera să păstrez datele într-o singură intrare, așa că am extras toate postările și folosesc o instrucțiune if pentru a obține rezultatele dorite

@AndrewWelch asta a fost acum 3 ani. Mulțumesc pentru interes, dar nici nu mai îmi amintesc pentru ce era asta
