How to get a variable number of posts per post type on the main loop?

I’m looking for a way to balance the content at the homepage of my blog:

the blog has a few post types like Poscasts, Videos and Blog and I’d like to have let’s say 10 Posts on the homepage, but I’d like to make 5 of them always the lastest Blog.

Read More

Making 3 separated boxes don’t solve my problem because the posts are mixed and there won’t always be as many posts of the other types.

I could think of the solution for it on pure PHP , but I’d like to get a idea on how to do this using the wordpress API, any help , reference will be welcome!

Related posts

Leave a Reply

2 comments

  1. So, after a few months. I found the answer to your exact question:

    add_action('pre_get_posts', 'custom_main_query', 1);
    function custom_main_query( $query ) {
      if ( $query->is_main_query() && is_home() ) { 
      //be super careful with this and to be safe, keep the is_home() 
      //bit there, I've had some funny results without it.
    
        $query->query_vars['posts_per_page'] = 3; //displays 3 posts ;)
        $query->query_vars['post_type'] = array('post'); //and if you wanted multiple cpts <3
    
        return $query;
    
        }
    }
    

    Cheers

  2. If you are still looking for an alternative that may be faster this may help you:

    <?php
    function customBlogFeed() {
    
    // The Query 
    $the_query = new WP_Query( array ( 'post_type' => array( 'post', 'page', 'movie', 'book'), 'posts_per_page' => '6' ) );
    //Your post_type array is a list of random post_types. You can add whatever you'd like to match your system.
    
    // The Loop 
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    
    
      <?php the_title(); ?>
          <?php the_content(); ?>
    
    <?php endwhile;
    
    // Reset Post Data
    wp_reset_postdata();
    }
    ?>
    

    Then to get it’s output put <?php customBlogFeed(); ?> wherever you’d like this to output.

    If you really want to get fancy you can hook into the post_limits Filter and limit how many posts per post type are displayed. I hope this helps you on your quest.

    PS – Look into WP_Query, it will really help you out.

    After some research you might actually want to look into post_clauses to get those SQL characterizations done with WP3.1+ Syntax