Filtrare una meta_query di WP_Query per valori numerici non funziona
Era un titolo molto denso.
Ho un custom post type "event" che ha un campo Date/Time picker "event_date" grazie al plugin Advanced Custom Fields. Questo Date/Time picker salva un timestamp UNIX nel database. Sto cercando di usare WP_Query per ottenere tutti gli eventi che sono oggi o nel futuro. Questo è il codice che ho al momento:
$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 );
Mi restituisce tutti gli eventi, passati e futuri.
Mi rendo conto che i timestamp sono memorizzati come stringhe nel database quindi 'compare' => '>=' normalmente non funzionerebbe, ma da quello che ho letto su Google e nel Codex, 'type' => 'numeric' dovrebbe convertire la stringa in un intero e permettere il confronto con il mio valore di questa mattina a mezzanotte. Sfortunatamente questo non sembra funzionare e non capisco perché.
Prova un array di array nella tua 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 );

wow, mi hai salvato la giornata con questa risposta! Stavo cercando di filtrare i post per un campo numerico personalizzato chiamato type_price e stavo provando a farlo in questo modo:
'meta_query' => array(
array(
'key' => 'type_price',
'value' => array( 0, 500000 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
)),
ma invece dovevo farlo così per ottenere l'ordinamento 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',
)
)),
grazie mille :)
