[wp-trac] [WordPress Trac] #59224: get_pages: duplicate `WP_Query::get_posts` call
WordPress Trac
noreply at wordpress.org
Mon Aug 28 12:44:50 UTC 2023
#59224: get_pages: duplicate `WP_Query::get_posts` call
-------------------------------+-----------------------------
Reporter: david.binda | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Posts, Post Types | Version: 6.3
Severity: normal | Keywords: has-patch
Focuses: performance |
-------------------------------+-----------------------------
The internal usage of `WP_Query` in `get_pages` (introduced in r55569 )
performs the `WP_Query::get_posts()` call twice ( see
https://core.trac.wordpress.org/browser/trunk/src/wp-
includes/post.php?annotate=blame#L6094 ).
When query args are passed to the `WP_Query` constructor, it returns the
result of the `WP_Query::get_posts` method call (proxied through
`WP_Query::query`). All the fetched posts are then already present in the
`WP_Query` object and the correct way to access those is via the
`WP_Query->posts` property.
In case the `WP_Query::get_posts()` is used, a duplicate SQL query is
performed, eventually leading to performance downgrade (yet the caching
inside the `WP_Query` mitigates this to some degree, unless
`cache_results` query param is set to `true`).
Anyway, I would propose to work with the `WP_Query` inside the `get_pages`
in the similar way as the code does in the `get_posts`, where the query
args are passed to the object through the `WP_Query::query` method it's
return value (the found posts) is being used (see
https://core.trac.wordpress.org/browser/trunk/src/wp-
includes/post.php?annotate=blame#L2440 ).
--
Ticket URL: <https://core.trac.wordpress.org/ticket/59224>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list