meta_query su un intervallo di date utilizzando un array di valori
Come posso eseguire una query che restituisca il post se l'array del campo personalizzato contiene una data compresa nell'intervallo specificato? La query qui sotto è fondamentalmente ciò che sto cercando di fare ma non funziona...
// l'array income_dates ha questo formato
// 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' => '<'
),
)
);
Dovevo ottenere i post di tipo evento con il campo personalizzato "data" successivo a oggi, questo frammento di codice ha funzionato perfettamente per me, spero possa aiutare qualcuno in una situazione simile.
$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,
)
);

Suggerisco di non memorizzare i valori meta come array
perché (penso) non sia ciò di cui hai bisogno. Credo che tu abbia effettivamente bisogno di memorizzare ogni valore meta individualmente con la sua coppia chiave/valore e non una singola chiave con valori serializzati. Quando fatto in questo modo, puoi utilizzare il confronto BETWEEN
:
$today = date("Y-m-d");
//Il confronto 'BETWEEN' con 'type' date funziona solo con date in formato YYYYMMDD.
//Vedi 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'
),
)
);

Grazie per la risposta e sì, potrebbe funzionare ma preferirei mantenere le date in un singolo record quindi ho semplicemente recuperato tutti i post e sto usando un'istruzione if per ottenere i risultati che mi servono

@AndrewWelch questo era 3 anni fa. Grazie per l'interesse ma non ricordo nemmeno per cosa servisse
