web-dev-qa-db-fra.com

'Essayer d'obtenir une propriété de non-objet' lors de l'utilisation de WP_Query avec 'fields' => 'ids'

Pour accélérer ma requête, j'utilise les arguments suivants:

$args = array(
    'post_type' => 'product',
    'fields' => 'ids',
);

$query = new WP_Query($args);

Bien que cela retourne un tableau d'identifiants comme prévu, je continue à recevoir plusieurs notifications Trying to get property of non-object in /wp-includes/query.php. Cela se produit même lorsque je n'ai rien dans ma while autre que the_post():

if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
endwhile;
endif;

Est-ce que the_post() en est la cause? Une idée de la raison pour laquelle je reçois ces avis?

4
Dre

the_post place le prochain objet post de $query->posts dans le $post global et appelle setup_postdata, qui suppose que $post est un objet post car il tente d'accéder aux membres vars de cet objet, d'où proviennent les erreurs.

Dans ce cas, $posts est simplement un tableau d’ID au lieu d’objets post. Si vous souhaitez parcourir les résultats, vous pouvez créer une foreach sur $posts:

$args = array(
    'post_type' => 'product',
    'fields' => 'ids',
);
$query = new WP_Query($args);

if ($query->have_posts()):
    foreach( $query->posts as $id ):
        echo 'ID: ' . $id;
    endforeach;
endif;
8
Milo