限制分页中的页数

时间:2015-07-13 作者:Hussain Ansari

我有500多篇帖子,我想限制只有100篇有分页的帖子。所以,10页,每页10篇帖子。向您展示代码:

$paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
$posts = get_posts( 
    array(
        \'numberposts\' => 10,
        \'paged\'       => $paged,
        \'meta_key\'    => \'property\',
        \'orderby\'     => \'meta_value_num\', //or \'meta_value_num\'
        \'order\'       => \'DESC\',
    )
);
if( $posts ) {
    $count = 0;
    foreach( $posts as $post ) {
        setup_postdata( $post );
        // post stuff
        $count++; 
    }
    wp_reset_postdata();
}

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

在我开始之前,不要使用get_posts 用于分页查询。get_posts 合法地中断分页,并且不返回查询对象。如果需要对查询分页,请使用WP_Query

至于你的问题,我真的不认为当你涉及分页时,将帖子总数限制在100篇是可能的。我能想到的唯一情况是:

删除第10页上的页面链接,但您也可以手动进入第11页并查看第11页的帖子

发布新帖子时运行自定义功能,将第101篇帖子和顺序帖子的状态更改为其他内容,如draft. 默认情况下,WP_Query 仅查询publish针对所有用户和额外用户的ed帖子private 登录用户的帖子。因此,如果您更改帖子状态,这些帖子将被排除在外

另一种干扰较小的方法是运行两个查询。第一个是非常基本和精简的,它将返回post ID的only 在前100个职位中。此ID将传递给第二个查询,该查询每页将获得10篇文章,并且只有10页,因为我们只向其传递100个ID。这里的优点是,如果手动输入第11页,您将得到404页。

正如我所说,第3点是最好的选择。我们将使用get_posts 对于第一个查询,因为它减少了分页,这会加快您的查询速度,而我们只会得到post ID,这使整个查询比正常查询快99.9%。总的来说,对页面的影响几乎为零。对于第二个查询,我们将使用WP_Query 以及post__in 参数以获取分页的帖子列表

此代码未经测试,需要PHP 5.4+)

$args = [
    \'posts_per_page\' => 100,
    \'fields\' => \'ids\',
    // Add additional args here
];
$post_ids = get_posts( $args );

if ( $post_ids ) {
    $args_2 = [
        \'paged\' => $paged,
        \'post__in\' => $post_ids,
        \'posts_per_page\' => 10,
    ];
    $q = new WP_Query( $args_2 );
    while ( $q->have_posts() ) {
    $q->the_post();
        // YOUR LOOP
    }
    next_posts_link( \'Next Posts\', $q->max_num_pages );
    previous_posts_link( \'Previous Posts\' ); 
    wp_reset_postdata();
}

SO网友:Trang

也许会有帮助

function wpcodex_filter_main_search_post_limits( $limit, $query ) {     
  return \'LIMIT 0, 100\'; 
} 
add_filter( \'post_limits\', \'wpcodex_filter_main_search_post_limits\', 10, 2 );
更多信息:post_limits filter

SO网友:Anand

请尝试此代码,它将帮助您仅显示10页。

这是要显示帖子的代码:

<?php 
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array( \'post_type\' => \'property\', \'posts_per_page\' => 10,\'paged\'=> $paged,\'orderby\'=> \'meta_value_num\',\'order\'=> \'DESC\');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
print_r($post); ?>
<h1> <?php the_post_thumbnail(); ?></h1>
<h2><?php the_title(); ?></h2>
<h3><?php the_content(); ?></h3>
<?php endwhile; ?>
这是需要显示分页的页脚。

<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; ?>
<?php if($loop->max_num_pages > 1 && $loop->max_num_pages < 11 ) { ?>
<ul class="pager">
<?php for($i=1;$i<=$loop->max_num_pages; $i++){ ?>
<li><a href="<?php  get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else if($loop->max_num_pages > 1 && $loop->max_num_pages > 10) {  ?>
<ul class="pager">
<?php for($i=1;$i<=10; $i++){ ?>
<li><a href="<?php  get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else{ ?>

<?php } ?>

结束

相关推荐

在页面模板中,而不是在unctions.php中,早期将javascrip文件入队

是否可以在页面模板文件的早期将javascript文件排队?我想使用这种包含脚本的方式来保持结构的整洁(因此每个页面模板都有自己的样式和脚本)。我不想在函数中使用条件。php。我不想改变功能。php。我只想修改模板文件。我可以将脚本排队,没有问题,但它总是添加在页面的末尾,我需要该脚本在前面可用(在显示某些HTML之前,最好是在显示任何HTML之前)。