Filtrar meta_query de WP_Query por valores numéricos no funciona
Ese era un título muy técnico.
Tengo un tipo de post personalizado "event" que tiene un campo selector de Fecha/Hora "event_date" gracias al plugin Advanced Custom Fields. Este selector guarda un timestamp UNIX en la base de datos. Estoy intentando usar WP_Query para obtener todos los eventos que son hoy o en el futuro. Este es el código que tengo actualmente:
$args = array(
'post_type' => 'event',
'posts_per_page' => -1,
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'key' => 'event_date',
'compare' => '>=',
'value' => intval(strtotime(date('Y-m-d'))),
'type' => 'numeric'
),
);
$query = new WP_Query( $args );
Me está devolviendo todos los eventos, tanto pasados como futuros.
Entiendo que los timestamps se almacenan como strings en la base de datos, por lo que normalmente 'compare' => '>=' no funcionaría, pero según lo que he leído en Google y en el Codex, 'type' => 'numeric' debería convertir el string a entero y permitir la comparación con mi valor de esta mañana a medianoche. Lamentablemente, esto no parece estar funcionando y no entiendo por qué.
Prueba con un array de arrays en tu meta query.
$args = array(
'post_type' => 'event',
'posts_per_page' => -1,
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'event_date',
'compare' => '>=',
'value' => intval(strtotime(date('Y-m-d'))),
'type' => 'numeric'
)
),
);
$query = new WP_Query( $args );

¡Vaya, me salvaste el día con esta respuesta! Estaba intentando filtrar publicaciones por un campo numérico personalizado llamado type_price y lo estaba intentando hacer de esta forma:
'meta_query' => array(
array(
'key' => 'type_price',
'value' => array( 0, 500000 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
)),
Pero debería hacerse de esta manera para ordenarlo ASC:
array(
'posts_per_page' => -1,
'meta_key' => 'type_price',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'type_price',
'value' => array( 0, 500000 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
)
)),
Muchas gracias :)
