Showing custom post types on your home/blog page
Published by Justin Tadlock on | 192 ResponsesIn the last few days, I’ve shown a few people a screenshot of something I’ve been working on for this site. The screenshot is of a home page displaying custom post types and not just the post post type. After numerous requests for the code to do this, I figured it’d be much easier to share it here.
WordPress version 3.0 will make creating custom post types extremely simple. But, the techniques I’ll point out in this tutorial can be used with previous versions of WordPress.
Changing the post type on the home page
By default, WordPress shows the post post type on your home page. Let’s suppose we want to show several post types in addition to posts:
- page (yes, regular pages)
- album
- movie
- quote
To add these, open your theme’s functions.php file and paste this PHP code into it:
add_filter( 'pre_get_posts', 'my_get_posts' ); function my_get_posts( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'page', 'album', 'movie', 'quote' ) ); return $query; }That’s all there is to it.
Showing the post types in your feed
Realizing that many of you might want to also add these post types to your feed to match your blog, a small change in the code is required. All you need to do is change this line:
if ( is_home() && $query->is_main_query() )We’ll use the is_feed() conditional tag:
if ( ( is_home() && $query->is_main_query() ) || is_feed() )Now, you can have custom post types in your regular blog post rotation and your feed. Enjoy and look for more custom post type tutorials soon.