web-dev-qa-db-fra.com

Comment puis-je obtenir une méta-valeur de WP_Query?

J'ai le type de message personnalisé foo avec des méta-champs appelés bar et baz. Maintenant, je reçois l'objet WP_Query en utilisant:

$args = array( 
       'post_type'      => 'foo', 
       'meta_key'       => 'bar', 
       'meta_value'     => $bar_value,
       'posts_per_page' => 10,
);
$res = new WP_Query($args);

Maintenant, je veux vérifier si la valeur baz de l'article sélectionné est égale à $baz_value. Comment puis je faire ça?

3
Joren

J'ai trouvé une solution à mon problème moi-même. Comme aucune des réponses existantes ne résolvait le problème, je me suis dit que je pourrais le mieux poster le mien ici pour aider les personnes aux prises avec des problèmes similaires.

La solution:

if($res->have_posts()) { 
    $id = $mail_res->posts[0]->ID; // blindly assuming there is only 1 post having baz = baz_value
    $true_baz = get_post_meta($id, 'baz')[0];

    if($true_baz== $baz) {
        //success
    } else {
        //error
    }
} else {
    //error
}
2
Joren

Avez-vous essayé celui-ci:

$args = array( 
   'post_type'      => 'foo', 
   'meta_key'       => 'bar', 
   'meta_value'     => $bar_value,
   'posts_per_page' => 10,
);
$res = new WP_Query($args);

 to 
  $args = array( 
   'post_type'      => 'foo', 
   'meta_key'       => 'bar', 
   'meta_value'     => $bar_value,
   'meta_compare'     => '=',
   'posts_per_page' => 10,
);
$res = new WP_Query($args);

Lisez ceci: WP_Query()- WordPress Codex

Les arguments de la requête se trouvent à plusieurs endroits dans l'objet de la requête. Vous pouvez var_dump l'objet et les voir.

  1. $res->query_vars
  2. $res->meta_query (dans ce cas)
  3. $res->query

Les articles 1 et 3 seront plus faciles à utiliser. La syntaxe simple PHP de l'objet et du tableau vous fournira les informations dont vous avez besoin.

0
s_ha_dum