Sort Query by Post In for WordPress
Sort Query by Post In is a very simple WordPress plug-in that allows post queries to sort the results (loop) in the order specified by the “post__in” parameter.
Sort Query by Post In is a very light weight (about 5 lines of code!) plug-in intended for developers executing custom post queries. You’re welcome to include it in your theme and redistribute — just offer us some credit, please!
When constructing a WordPress post query in your theme template files or plug-in, WordPress offers the option to explicitly specify the posts to retrieve using the “post__in” parameter. Unfortunately, the “orderby” parameter does not offer an option that will sort the result by the exact order passed in the post__in parameter. This plug-in adds a “post__in” option for the “orderby” parameter that will order the result by the exact order specified by the the “post__in” parameter.
And don’t worry about the plug-in being deactivated – your post queries with “post__in” value used for the “orderby” will simply gracefully fall back to the default date sorting.
So what’s the use case? Well, many special themes allow the editor to specify the posts they want to show in certain parts of the front end theme. For example, the user may be able to specific “featured post” #1, #2, and #3 for a part of the home page. Without this plug-in, the template would have to execute a distinct post query for each post to ensure they are presented in the order specified as #1, 2, and 3. Now, a developer can execute a query for all the posts in one shot, sorting them by the specified order.
How does it work?
Let’s say you want to retrieve posts 20, 10, and 106, in that order. You can retrieve those posts without this plug-in using the “post__in” parameter with the post query.
query_posts( array( 'post__in' => array(20,10,106) ) );
But they’ll be ordered by date, or one of the others you specify with the “orderby” parameter. This plug-in adds a new “orderby” option that will order the posts by the order they were specified in the “post__in” array! Here’s how to modify the query above to return the posts in the order specified:
query_posts( array( 'post__in' => array(20,10,106), 'orderby' => 'post__in' ) );
As always, feedback and suggestions are welcome!