web-dev-qa-db-fra.com

Utilisation de meta_query personnalisée avec une relation ne fonctionnant pas comme prévu

J'essaie de créer une requête pour extraire uniquement les événements futurs. Cela fonctionnait parfaitement jusqu'à ce que le client demande la possibilité d'ajouter des plages de dates - l'événement aura donc soit une date de début uniquement, OR une date de début et une date de fin. Je dois créer une requête qui extrait des événements dont la date de début est une date ultérieure dans le futur OR et une date de fin dans le futur. Cela ne fonctionne pas comme prévu et entraîne tous les événements. et l'ordre de ce qui est tiré semble aléatoire, malgré la mise en ordre de meta_value. Toute aide serait très appréciée!

    function get_upcoming_events($num) {
    $today =  gmdate('Y-m-d', time()-28800);

    $args = array(
        'meta_key'          => 'event_date',
        'order'             => 'ASC',
        'orderby'           => 'meta_value',
        'post_status'       => 'publish',
        'posts_per_page'    => $num,
        'post_type'         => 'events',
        'meta_query' => array(
            'relation'=>'OR',
            array(
                'key' => 'event_date',
                'type' => 'DATE',
                'value' => $today,
                'compare' => '>=' 
            ),
            array(
                'key' => 'end_date',
                'type' => 'DATE',
                'value' => $today,
                'compare' => '>=' 
            )
        )
    );

    if ( isset( $data[ 'taxonomy' ]) ) {
        $args[ 'tax_query' ] = array();
        $args[ 'tax_query' ][0] = array(
            'field'     => 'slug',
            'taxonomy'  => 'event-type',
            'terms'     => 'general'
        );
    }
    $myquery = new WP_Query( $args );
    return $myquery;
    }
3
Kristin

Vous obtenez tous les messages parce que vous avez défini 'meta_key' => 'event_date'.

Ceci équivaut à ajouter une autre sous-requête dans 'meta_query' qui dit "récupère toutes les publications qui ont un champ personnalisé event_date, avec any value OR et qui ont even_date à $ today etc.".

PS: Il existe de nombreux plug-ins d'événement qui ont déjà compris tout cela. Essayez-les ou au moins regardez leur code.

5
scribu