Filtrare una meta_query di WP_Query per valori numerici non funziona

7 mag 2013, 21:08:06
Visualizzazioni: 16K
Voti: 4

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é.

0
Tutte le risposte alla domanda 2
2
10

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 );
7 mag 2013 21:10:57
Commenti

Grazie mille, funziona anche per me con l'Unix Time. (Mi hai risparmiato un sacco di tempo)

Ajay Patel Ajay Patel
22 nov 2014 13:47:56

+1 per 'meta_value_num' rispetto a 'meta_value' per confrontare timestamp che sono memorizzati come stringhe.

Drakes Drakes
6 lug 2017 20:53:49
0

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 :)

7 apr 2016 10:44:46