Displaying custom post type on front page

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.

Read More

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

http://pastie.org/5120964

Related posts

Leave a Reply

2 comments

  1. 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.

  2. I would try this first:

    global $wp_query;
    $args = array_merge( $wp_query->query, array( 
      'posts_per_page' => -1,
      'post_type' => 'any',
    ) );
    
    query_posts( $args );
    

    This will keep the original query, and display every single post (-1 means “all posts”), of every post type. That should help you troubleshooting the issue.