meta_query en un rango de fechas usando un array de valores
¿Cómo puedo hacer una consulta para que devuelva el post si el array del campo personalizado contiene una fecha que está dentro del rango especificado? La consulta de abajo es básicamente lo que necesito pero no funciona...
// el array income_dates luce así
// 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' => '<'
),
)
);
Necesitaba obtener publicaciones del tipo evento con el campo personalizado "fecha" posterior al día de hoy, este fragmento de código me funcionó perfectamente, espero que ayude a alguien en una situación 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,
)
);

Sugiero no almacenar los metavalores como array
porque (creo) no es lo que necesitas. Pienso que realmente necesitas almacenar cada metavalor individualmente con su propio par clave/valor y no una sola clave con valores serializados. Cuando se hace de esta manera, puedes usar la comparación BETWEEN
:
$today = date("Y-m-d");
//La comparación 'BETWEEN' con 'type' date solo funciona con fechas en formato YYYYMMDD.
//Ver 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'
),
)
);

Gracias por la respuesta y sí, eso funcionaría pero prefiero mantener las fechas en una sola entrada, así que simplemente he recuperado todas las publicaciones y estoy usando una declaración if para obtener los resultados que busco

@AndrewWelch esto fue hace 3 años. Gracias por el interés pero ni siquiera recuerdo para qué era esto
