2

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

1
4

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.

3
  • Can you better explain where I would put this? In the index, loop, or functions?
    – hiiambo
    Oct 26 '12 at 21:48
  • see my edit: in functions (probably sans the open <?php or in a plugin. Oct 26 '12 at 21:51
  • Can we show postype name or label as headings on frontend?
    – dh47
    Jul 27 '17 at 10:17
0

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.

2
  • Where would this go? Into the loop or into index?
    – hiiambo
    Oct 26 '12 at 21:40
  • 1
    get_posts() would be better, because query_posts() will overwrite the main query object.
    – fuxia
    Oct 26 '12 at 22:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.