This code snippet will allow you to show different number of posts on homepage, per category, and post type without using any plugin.
function different_post_per_page( $query ) { if ( $query->is_main_query() && $query->is_home() ) { //Display 1 post per page on the homepage $query->query_vars['posts_per_page'] = 1; return; } if ($query->is_main_query() && $query->is_category('dinner') ) { //Display 5 posts per page for a category called 'dinner' $query->query_vars['posts_per_page'] = 5; return; } if ( $query->is_main_query() && $query->is_post_type_archive('receipe') ) { //Display 10 posts per page for a custom post type called 'receipe' $query->query_vars['posts_per_page'] = 10; return; } } add_action('pre_get_posts', 'different_post_per_page', 1);
Another use of this hook can be to include or exclude posts from certain categories on homepage.