web-dev-qa-db-fra.com

Filtrer une meta_query WP_Query par des valeurs numériques ne fonctionne pas

C'était un titre très dense.

J'ai un type de message personnalisé "événement" qui a un champ de sélecteur Date/Heure "date_événement" grâce au plugin Advanced Custom Fields. Ce sélecteur de date/heure enregistre un horodatage UNIX dans la base de données. J'essaie d'utiliser WP_Query pour obtenir tous les événements d'aujourd'hui ou à venir. C'est le code que j'ai en ce moment:

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

Cela me donne tous les événements, passés et futurs.

Je me rends compte que les horodatages sont stockés sous forme de chaînes dans la base de données, donc 'comparer' => '> =' ne fonctionnerait normalement pas, mais ce que j'ai lu sur Google et dans le Codex est ce que 'type' => 'numérique' devrait lancer la chaîne en un entier et lui permettre d'être comparée à ma valeur de ce matin à minuit. Malheureusement, cela ne semble pas fonctionner et je ne comprends pas pourquoi.

2
Ryan Giglio

Essayez un tableau de tableaux dans votre méta requête.

$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, vous avez sauvé ma journée avec cette réponse. J'essayais de filtrer les publications par un champ numérique personnalisé appelé type_price et j'essayais de le faire de cette façon:

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

mais cela devrait être comme cela: 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',
            )
        )),

merci beaucoup :)

0
user91935