web-dev-qa-db-fra.com

meta_key et meta_value ne fonctionnent pas ensemble

J'essaie de filtrer la boucle pour trouver les publications qui ont un meta_key avec un meta_value spécifique. J'ai consulté le Codex et j'ai essayé ce qui suit sans succès:

// No results
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Tried this too
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

// No results
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority',
    'meta_value' => 80
);

// This list me all cqpp_interventions and I can confirm that I have some with meta_value set to 80
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority'
);


$cqpp_posts = get_posts( $args );

Voici comment je vérifie à l'intérieur de la boucle:

$priority = get_post_meta( get_the_ID(), 'priority');
echo '<pre>';
var_dump($priority);
echo '</pre>';

qui se traduit par:

search.php:16:
array (size=1)
    0 => 
        array (size=1)
            0 => string '80' (length=2)

search.php:16:
array (size=1)
    0 => 
        array (size=2)
        0 => string '80' (length=2)
        1 => string '91' (length=2)

Que puis-je faire pour résoudre ce problème?

1
Jonathan Lafleur

Vous pouvez essayer ceci:

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
        array(
            'key' => 'priority',
            'value' => '80'
        )
    )
);

Le véritable problème de votre requête est que vous passez meta_key et meta_value. Cependant, les tableaux de votre argument meta_query devraient plutôt contenir les clés key et value.

Cela fonctionnerait aussi:

'key' => 'priority',
'value' => array('80')
2
Chin Leung

A partir de la référence de vos premiers $ args

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Tried this too
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

Vous avez ajouté 'relation' => 'OR', ce qui n'est pas nécessaire. La relation doit être ajoutée si vous avez plusieurs méta-valeurs à interroger. De plus, la comparaison n'est pas nécessaire si vous souhaitez une valeur spécifique, car utilise par défaut =.

Les $ args mis à jour seront

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            array(
                'meta_key' => 'priority',
                'meta_value' => '80', // since 80 is string
             )
    )
);

// try either of below.
$myPost = new WP_Query( $args ); // fetch post and managed in objects
$myPost = get_posts( $args ); // fetch post and store in array

Espérons que cela va vous aider.

Merci

0
Aftab