[wp-hackers] get_post() not fetching from post cache after update_post_caches()
William Canino
william.canino at googlemail.com
Fri Oct 16 21:38:45 UTC 2009
Thanks Otto, I use posts_per_page now. ...
... only to realize that running a dozen get_permalinks(ID) is still
faster than running one WP_Query(array('post__in' => array([a dozen
post IDs])));.
I ended up coding for two cases. If the post IDs are over a dozen, I
run a WP_Query first.
I hope this tip helps another.
2009/10/5 Otto <otto at ottodestruct.com>:
> "numberposts" only works with the get_posts call, not with a WP_Query object.
>
> A WP_Query expects either "posts_per_page" or "showposts" (which is
> deprecated) for the number of posts.
>
> Setting posts_per_page to -1 will have the same effect as setting
> nopaging to true. Either will eliminate the LIMIT section entirely,
> making it return all posts.
>
> And yes, if you fail to specify a parameter, then it'll take it from defaults.
>
> -Otto
>
>
>
> On Sun, Oct 4, 2009 at 1:04 PM, William Canino
> <william.canino at googlemail.com> wrote:
>> Hello all,
>>
>> Regarding
>>
>>> $my_query = new WP_Query(array('post__in' => array([very long array of post IDs])));
>>> update_post_caches($my_query->posts);
>>> echo $get_permalink(1);
>>> echo $get_the_title(2);
>>>
>>> Do you know why WordPress is still making SQL
>>> queries on lines 3 and 4? Shouldn't they be already in
>>> the object cache?
>>
>> I found the answer ... and subsequently found an irregularity in the
>> WordPress core. I don't know if I should call it a bug.
>>
>> get_posts is automatically adding "LIMIT 0, 6" to the SQL statement. 6
>> is the number of posts per page set in the blog's Reading settings.
>> That's why posts 1 and 2 are not in the object cache. Furthermore,
>> adding either of the following
>>
>> 'numberposts' => -1 // as per Codex
>> 'nopaging' => true // as per Codex
>>
>> to the call, such as, $my_query = new WP_Query(array('post__in' =>
>> [very long array of post IDs], 'nopaging' => true)); makes no
>> difference.
>>
>> I opened WordPress's query.php and examined it, and found what I had to use:
>>
>> new WP_Query(array('post__in' => [very long array of post IDs],
>> 'posts_per_page' => 100000));
>>
>> or some high number. This is the solution.
>>
>> Moral of the Story: If one uses WP_Query for one's ends, he must set
>> all the parameters he needs so that the custom WP_Query doesn't use
>> the blog's settings.
>>
>> Is this an irregularity or is this a bug?
>>
>> W
>>
>> 2009/10/2 Otto <otto at ottodestruct.com>:
>>> That's fine, but it still doesn't show the actual contents of the
>>> cache. You're going to have to dump the cache before and after the
>>> get_the_title call to see why it's missing.
>>>
>>> -Otto
>>> Sent from Memphis, TN, United States
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
More information about the wp-hackers
mailing list