I added a new custom post type to my WordPress theme but it refuses to show on the homepage. I tried setting

<?php query_posts( array( 'post_type' => array('post', 'reviews') ) );?>

but it doesn’t seem to work, it just loops my normal posts. Any suggestions would be greatly helpful.

Here’s a pastie of my index if anyone wants to see it:

http://pastie.org/5120964

2 Answers
2

I would avoid the use of query_posts — it forces another database hit. There are plenty of other ways to hook in and change the query before posts are fetches. pre_get_posts is one of them.

To display multiple post types on the home page (pages and posts in this example):

<?php
add_action('pre_get_posts', 'wpse70606_pre_posts');
/**
 * Change that query! No need to return anything $q is an object passed by 
 * reference {@link http://php.net/manual/en/language.oop5.references.php}.
 *
 * @param   WP_Query $q The query object.
 * @return  void
 */
function wpse70606_pre_posts($q)
{
    // bail if it's the admin, not the main query or isn't the (posts) page.
    if(is_admin() || !$q->is_main_query() || !is_home())
        return;

    // whatever type(s) you want.
    $q->set('post_type', array('post', 'page'));
}

This would go in your themes’s functions.php file or in a plugin.

Leave a Reply

Your email address will not be published. Required fields are marked *