Je travaille sur des comparaisons assez élaborées entre les métadonnées et j'ai un peu de mal à me référer correctement aux résultats de ma requête. La première requête pour établir $team_is_home
fonctionne bien, mais dès que j'essaie de capturer l'ID des publications où le $team_is_home
devient un peu abominable et que des avertissements s'affichent: "Propriété non définie: WP_Query :: $ post"
$args = array(
'post_type' => 'match_report',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'report_home-select',
'value' => $team_id,
'compare' => '=',
),
)
);
$hometeams = new WP_Query($args);
$team_is_home = $hometeams->found_posts;
$scorehome = get_post_meta($hometeams->post->ID, 'report_homescore');
Comment devrais-je me référer à $hometeams->post->ID
pour éviter cet avertissement?
Tout d’abord, le champ post
de WP_Query est l’ID de publication en cours et non un objet de publication. Mais je ne pense pas que vous devriez l’utiliser avant d’appeler la méthode the_post()
.
Normalement, vous devriez le faire de cette façon:
$args = ...
$hometeams = new WP_Query( $args );
$teamishome = $hometeams->have_posts();
while ( $hometeams->have_posts() ) {
$hometeams->the_post();
$scorehome = get_post_meta($post->ID, 'report_homescore', true); // you want only one meta, not all array I guess.
...
}
Si vous var_dump($hometeams);
, vous verrez que $hometeams->post
est défini sur la première publication dans les résultats de la requête, même avant que $hometeams->the_post
soit exécuté. WP_Query
l'initialise automatiquement si vous avez des publications dans le jeu de résultats .
L'avertissement "Propriété non définie" se produit lorsque votre jeu de résultats est vide et que, par conséquent, $hometeams->post
ne peut pas être défini/initialisé.
Vous devez vérifier que vous avez un $hometeams->post
rempli avant d'essayer de l'utiliser. Si vous utilisez while ( $hometeams->have_posts() ) {
comme suggéré dans une réponse ou foreach($hometeams->posts as $key => $post){
comme dans une autre, vous passez en boucle sur $hometeams->posts
et évitez ainsi complètement le problème avec $hometeams->post
.
Une autre option serait ...
if (!empty($hometeams->post)) {
$scorehome = get_post_meta($hometeams->post->ID, 'report_homescore');
}
... cependant, puisque votre requête ne contient pas 'posts_per_page' => 1
, vous devez utiliser une boucle ou vous ne recevrez qu’un des nombres potentiellement élevés de publications dans le jeu de résultats.
Veillez à exécuter reset_postdata
après votre boucle secondaire pour réinitialiser $post
, ou wp_reset_query
si nécessaire.
Vous pouvez aussi le faire avec foreach
$args = ...
$hometeams = new WP_Query( $args );
foreach($hometeams->posts as $key => $post){
echo get_post_meta($post->ID, 'report_homescore', true);
}