web-dev-qa-db-fra.com

Meta Query avec AND & OR?

J'essaie de filtrer certaines publications dans WP_Query, mais je n'arrive pas à obtenir le bon état. Ce que je veux faire, en gros, est d’obtenir les publications qui ont le champ personnalisé event_data (trié par ce champ) et parmi ces publications de ne sélectionner que celles qui ont rempli un de ces champs event_doc1, event_doc2, event_doc3, main_doc.

Le code est ci-dessous.

$metaCondition = array(
            'relation' => 'OR',
            array(
                'key' => 'main_doc',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc1',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc2',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc3',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            )
        );

        $query = array(
            'numberposts' => 4, 
            'orderby' => 'meta_value',
            'meta_key' => 'event_data', 
            'order' => 'ASC', 
            'meta_query' => $metaCondition
        );

Merci d'avance à tout le monde!

5
Olsi

Désolé, ça ne marche pas comme ça. Les méta-paramètres "simples" sont convertis en une partie de la méta_query dans son ensemble. Donc, ce n'est pas une chose séparée, et votre relation {OR s'applique également à cette relation.

Votre requête n’est donc pas possible avec le système de requête normal, car vous voulez mélanger des ET avec des OR (vous voulez des éléments qui ont event_data ANDed avec un tas d’autres avec des OR entre eux).

Vous devrez recourir à un code SQL personnalisé ou à repenser votre conception.

7
Otto