WP_Query vs get_posts

The difference between get_posts & WP_Query

You can view get_posts() as a slimmed down WP_Query. In fact looking at the source:

//... prepares query array $r
$get_posts = new WP_Query;
return $get_posts->query($r);

get_posts() use WP_Query, but only returns an array of posts – nothing more. Furthermore it sets:

$r['no_found_rows'] = true;

Normally (by default with WP_Query object) – WordPress queries how many posts there are in total – even if you are only after the first 10. It does this so it can perform pagination. So get_posts() is actually (slightly) quicker (it also ignores sticky posts).

Which to use…

If you only need an array of posts, and don’t need the query object -use get_posts(). Otherwise, if you do need the access to the query object methods, or pagination, or sticky posts at the top, you should use WP_Query.

Leave a Comment