Filtrarea unei interogări WP_Query meta_query după valori numerice nu funcționează

7 mai 2013, 21:08:06
Vizualizări: 16K
Voturi: 4

Acesta a fost un titlu destul de dens.

Am un tip personalizat de postare "event" care are un câmp de selectare a datei/orei "event_date" datorită plugin-ului Advanced Custom Fields. Acest selector salvează un timestamp UNIX în baza de date. Încerc să folosesc WP_Query pentru a obține toate evenimentele care sunt astăzi sau în viitor. Iată codul pe care îl am în prezent:

$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 returnează toate evenimentele, atât trecute cât și viitoare.

Îmi dau seama că timestamp-urile sunt stocate ca șiruri de caractere în baza de date, așa că 'compare' => '>=' în mod normal nu ar funcționa, dar din ce am citit pe Google și în Codex, 'type' => 'numeric' ar trebui să convertească șirul la întreg și să permită compararea cu valoarea mea de la miezul nopții. Din păcate, acest lucru nu pare să funcționeze și nu înțeleg de ce.

0
Toate răspunsurile la întrebare 2
2
10

Încearcă o matrice de matrice în interogarea ta meta.

$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 mai 2013 21:10:57
Comentarii

Mulțumesc mult, funcționează și pentru mine cu Unix Time. (Mi-ai economisit mult timp)

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

+1 pentru 'meta_value_num' față de 'meta_value' atunci când compari timestamp-uri care sunt stocate ca șiruri de caractere.

Drakes Drakes
6 iul. 2017 20:53:49
0

wow, mi-ai salvat ziua cu acest răspuns, încercam să filtrez postările după un câmp numeric personalizat numit type_price și încercam să o fac așa:

'meta_query' => array(
    array(
        'key' => 'type_price',
        'value' => array( 0, 500000 ),
        'compare' => 'BETWEEN',
        'type' => 'NUMERIC',
 )),

dar trebuia făcut astfel pentru a le sorta 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',
            )
        )),

mersi mult :)

7 apr. 2016 10:44:46