Make WordPress Core

Opened 9 months ago

#63106 new defect (bug)

The loop can throw warning if `WP_Query::have_posts()` not called.

Reported by: peterwilsoncc's profile peterwilsoncc Owned by:
Milestone: Awaiting Review Priority: low
Severity: normal Version:
Component: Query Keywords:
Focuses: Cc:

Description

Starting or overrunning the loop can throw a warning if WP_Query::have_posts() is not called correctly via the developer. The issue can be seen in these tests:

<?php function test_no_posts() { $query = new WP_Query( array( 'post_type' => 'unregistered_cpt' ) ); $query->the_post(); $this->assertEmpty( $query->posts ); } function test_too_many_calls() { $post_id = $this->factory()->post->create(); $query = new WP_Query( array( 'p' => $post_id ) ); // Call the post twice.  $query->the_post(); $query->the_post(); $this->assertNotEmpty( $query->posts ); } 

In each case the tests will throw an error before reaching the assertion, as they are attempting to access an array key that does not exist.

A part of me is tempted to close this as wontfix, as it's very clearly documented that one should use while ( have_posts() ) for the primary loop or while $query->have_posts() for a secondary loop.

Change History (0)

Note: See TracTickets for help on using tickets.