web-dev-qa-db-fra.com

meta_query comparaisons date et heure

J'essaie d'interroger mes publications sur la valeur de 2 méta_keys personnalisées ...

'_mdjm_event_date' au format Y-M-D (2015-05-13) '_mdjm_event_finish' au format H: i: s (23:35:00)

Voici ma requête ...

$args = array(
                    'posts_per_page'    => -1,
                    'post_type'      => MDJM_EVENT_POSTS,
                    'post_status'      => 'mdjm-approved',
                    'meta_key'        => '_mdjm_event_date',
                    'meta_value'        => date( 'Y-m-d' ),
                    'meta_compare'    => '<=',
                    'meta_type'      => 'date',
                    'meta_query'        => array(
                                            'relation'  => 'AND',
                                                array(
                                                    'key'       => '_mdjm_event_finish',
                                                    'value'   => date( 'H:i:s' ),
                                                    'compare'   => '>',
                                                    'type'     => 'numeric',
                                                ),
                                            ),
                    );

Ce que j'essaie de renvoyer, ce sont tous les messages qui ont une date d'événement antérieure ou égale à aujourd'hui. Si la date de l'événement est aujourd'hui, l'heure de fin doit être inférieure à l'heure actuelle, mais le code ci-dessus ne fournit pas les résultats souhaités. J'ai 8 événements qui répondent aux critères, mais je ne reçois que 2 retours.

Toute aide appréciée

Merci

1
Mike

Vous mélangez une méta syntaxe plus ancienne avec la plus récente. Je suggérerais que vous nettoyiez cela pour plus de lisibilité et pour une compatibilité potentielle dans le futur. (WordPress semble cependant analyser correctement la requête mixte)

$args = array(
  'posts_per_page'    => -1,
  'post_type'         => MDJM_EVENT_POSTS,
  'post_status'       => 'mdjm-approved',
  'meta_query'        => array(
    'relation'  => 'AND',
    array(
        'key'       => '_mdjm_event_date',
        'value'     => date( 'H:i:s' ),
        'compare'   => '<=',
    ),
    array(
        'key'       => '_mdjm_event_finish',
        'value'     => date( 'H:i:s' ),
        'compare'   => '>'
    ),
  ),
);

Une autre chose que j'ai changée était le transtypage en numérique de la date. Je suis à peu près sûr que cela a déclenché votre requête. Si vous exécutez SELECT CAST('23:20:36' as signed) dans une console MySQL (PHPAdmin, ligne de commande, etc.), vous verrez que ce qui est renvoyé n'est que "23". Cela ne va pas correspondre.

2
s_ha_dum