web-dev-qa-db-fra.com

WP Meta_query 3.1 pour plusieurs valeurs de champs personnalisés

J'essaie d'utiliser une logique conditionnelle pour comparer des champs personnalisés dans ma requête, mais un peu bloqué. Comment pourrais-je obtenir tous les messages avec ReleasedProject AND PermanentArtist défini sur "true"?

Voici ce que j'ai jusqu'à présent, je suppose que cela a quelque chose à voir avec 'comparer':

Merci

osu

EDIT: pour clarifier ce que je veux faire, j'essaie d'exclure des pages comportant deux valeurs de champ personnalisées (ReleasedProject et PermanentArtist dans ce cas ) réglé sur 'false'. Celles-ci sont définies via les cases à cocher générées à l'aide du modèle de champ personnalisé du plug-in.

J'ai mis à jour le code pour illustrer le fait que je dois filtrer toutes les pages avec ces deux champs personnalisés définis sur false:

global $post;
$artist_args = array(
    'post_type' => 'page',
    'post_parent' => $post->ID,
    'posts_per_page' => -1,
    'orderby' => 'name',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'ReleasedProject',
            'value' => 'false'
        ),
        array(
            'key' => 'PermanentArtist',
            'value' => 'false'
        )
    )
);
$my_query = new WP_Query($artist_args);
1
Osu

Si vous souhaitez que toutes les publications ayant ReleasedProject AND PermanentArtist soient toutes deux définies sur true, vous devez modifier les clés value pour les deux en 'true'. Si vous souhaitez exclure toutes les publications dont les deux sont définies sur 'false', vous devez ajouter 'compare' => '!=' aux deux tableaux de méta-requêtes.

MODIFIER

La logique des méta-requêtes est telle que toutes les conditions doivent être remplies (c'est une relation AND). Donc si vous dites

'meta_query' => array(
    array(
        'key' => 'ReleasedProject',
        'value' => 'false'
    ),
    array(
        'key' => 'PermanentArtist',
        'value' => 'false'
    )
)

Cela signifie "trouver tous les articles dont le projet relâché est identique à 'false' ET artiste permanent identique à 'false'." Si vous deviez ajouter l'instruction 'compare' => '!=' comme je l'ai mentionné plus tôt, le message "trouvez tous les articles dont le projet relâché n'est PAS identique à 'false' ET Artiste permanent n'est pas identique à 'false'". Si vous avez une publication dont le projet relâché est défini sur 'false' et l'artiste permanent défini sur 'true', il n'apparaîtra dans aucune de ces requêtes.

De plus, si une méta-valeur est manquante, elle ne figurera pas non plus dans les résultats. Ainsi, si vous avez une publication dont le projet Released est défini sur true et que l'artiste permanent n'est pas défini du tout, cette méta-requête ne trouvera pas cette publication:

'meta_query' => array(
    array(
        'key' => 'ReleasedProject',
        'value' => 'false',
        'compare' => '!='
    ),
    array(
        'key' => 'PermanentArtist',
        'value' => 'false'
        'compare' => '!='
    )
)

Fondamentalement, les méta-requêtes ne font pas de "vérifications", mais "et/et" lorsque vous avez plusieurs méta-requêtes.

1
John P Bloch