it-swarm.com.de

Das Filtern einer WP_Query-Meta-Abfrage nach numerischen Werten funktioniert nicht

Das war ein sehr dichter Titel.

Ich habe einen benutzerdefinierten Beitragstyp "event", der dank des Plugins "Advanced Custom Fields" ein Datum/Uhrzeit-Auswahlfeld "event_date" enthält. Diese Datums-/Uhrzeitauswahl speichert einen UNIX-Zeitstempel in der Datenbank. Ich versuche, WP_Query zu verwenden, um alle Ereignisse abzurufen, die heute oder in Zukunft vorliegen. Dies ist der Code, den ich gerade habe:

$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 );

Es gibt mir alle Ereignisse, Vergangenheit und Zukunft.

Mir ist klar, dass die Zeitstempel als Zeichenfolgen in der Datenbank gespeichert sind, sodass "compare" => "> =" normalerweise nicht funktioniert. Was ich aber bei Google und im Codex gelesen habe, ist "type" => "numeric". sollte die Zeichenfolge in eine Ganzzahl umwandeln und mit meinem Wert von heute morgen um Mitternacht vergleichen. Leider scheint das nicht zu funktionieren und ich verstehe nicht warum.

2
Ryan Giglio

Probieren Sie ein Array von Arrays in Ihrer Meta-Abfrage aus.

$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
Kailey Lampert

woa, du hast meinen Tag mit dieser Antwort gerettet, ich habe versucht, Beiträge nach benutzerdefiniertem numerischen Feld mit dem Namen type_price zu filtern, und ich habe versucht, es so zu machen:

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

aber es sollte so sein, um es ASC zu tun:

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',
            )
        )),

danke vielmals :)

0
user91935