How to return select fields from native WordPress queries
-
I’m writing a WordPress plugin that displays a lists of all posts organized by month and year. Similar plugins exists, but those all seem to have huge overhead and an outrageous number of queries. I can get all the info I need with one query, but then I run into problems when I’m trying to display the permalink to each post.
Here is the problem:
The WordPress function
get_permalink($id)accepts $id as either an int or an object. If it’s an object WordPress returns the permalink based on the users chosen structure; however, if it’s an int, it turns the variable into an object first by querying the wp_posts table. This is a problem because if I have hundreds or thousands of posts, then suddenly I have that many queries too!Possible solution:
One obvious solution is, in my original query, to return post_date, post_category, etc. and create the permalink structure myself based on
get_option('permalink_structure'), but this doesn’t seem very future proof, and then I’m also rewriting code that already exists within the WordPress core.A second solution is to run
get_posts()and store the results in an array index bypost->ID. Then if I run something likeget_permalink($posts[$post_id])I’m passing an object and it doesn’t require an extra query.The problem with this, though, is that querying all posts seems really expensive. A dump of the returned array reveals that all the post’s content is contained in that variable, and that seems completely unnecessary.
So:
Is it possible to do a new
WP_Queryorget_postsand only return certain information — namely, don’t return all that unnecessary content data? If it’s not possible, I think it certainly should be. After all, one of the main criticisms I hear about WordPress is that it’s too slow.Also, if anyone has any other suggestions for how I can achieve what I’m trying to do another way, that would be very helpful.
Thanks!
The topic ‘How to return select fields from native WordPress queries’ is closed to new replies.