最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Override the default number of posts to show for a single loop?

programmeradmin5浏览0评论

Is is possible to override the set # of blog posts to show per page (as defined under Reading Settings in the WordPress admin)? I want to make it so a custom loop that I am using will show an unlimited number.

Is is possible to override the set # of blog posts to show per page (as defined under Reading Settings in the WordPress admin)? I want to make it so a custom loop that I am using will show an unlimited number.

Share Improve this question asked Feb 7, 2011 at 20:19 user1462user1462 1,3043 gold badges17 silver badges23 bronze badges
Add a comment  | 

5 Answers 5

Reset to default 10

The argument that controls how many posts are shown in the query is posts_per_page

<?php query_posts( array( 
                         'post_type' => 'post',
                         'posts_per_page' => -1 ) 
      ); 
?>

Also to note is that there is a bug in the 3.0 branch which prevents the -1 integer from displaying all posts. It is fixed in 3.1 but a workaround would be to use a very high number instead of -1

see:

http://core.trac.wordpress/ticket/15150

Sure, change the query by adding

<?php query_posts('post_type=post&numberposts=-1'); ?>

Eileen is right but it's better to use arguments as an array <?php query_posts( array( 'post_type' => 'post', 'numberposts' => -1 ) ); ?>

I had the same issue.. I decided to add a custom variable and then catch that variable during pre_get_posts to set the post_per_page query_var:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override'] == '3') {
        $query->set('posts_per_page', '3');
    }
}

Then I went even further and make it get the exact amount you want to display in the custom query var:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override']) {
        $customPPPlimit = $query->query_vars['post_per_page_override'];
        $query->set('posts_per_page', $customPPPlimit);
    }
}

Worked for me..

If you're using a custom loop, just specify posts_per_page, e.g.:


$query = new \WP_Query( [ 'posts_per_page' => 100 ] );
if ( $query->have_posts() ) {
    ......etc

You could set posts_per_page to -1 for unlimited posts, but this is very bad practice. Instead set however many posts you think your server can serve without falling over so that your site doesn't go down if too many posts are created, 200 is a good upper limit.

Otherwise, use the pre_get_posts filter to modify the parameters passed to queries:

add_action( 'pre_get_posts', function ( $query ) {
    if ( is_admin() ) {
        return;
    }
    $query->set( 'posts_per_page', 100 );
}

Note that this will set all queries to 100 pages, including feeds, REST API, XMLRPC, etc

In addition, some people will recommend query_posts, but this is bad practice and will cause lots of other issues

发布评论

评论列表(0)

  1. 暂无评论