我如何使我的分页工作?

时间:2015-11-08 作者:Ovifdiu COmrasdd

在自定义页面模板中,我使用以下代码显示该类别和子类别中的帖子。

如何使分页工作?

// The Query
query_posts( array ( \'category_name\' => \'publicatii\', \'posts_per_page\' => 4 ) );

// The Loop
while ( have_posts() ) : the_post();
    echo \'<h1>\';
    the_title();
    echo \'</h1>\';
    the_excerpt();
    echo \' <p class="postinfo">Written by: \';
    the_author_posts_link();
    echo \'Posted on \';
    the_date();
    echo \'Categories: \' ;
    the_category( \', \' );
    echo \'</p>\' ;
endwhile;

global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    \'base\'    => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\'  => \'?paged=%#%\',
    \'current\' => max( 1, get_query_var( \'paged\' ) ),
    \'total\'   => $wp_query->max_num_pages
) );

// Reset Query
wp_reset_query();

get_footer();
例如,它确实更改了链接(page/2/ ... page/3/), 但它不会更改该页面的帖子(仍然是相同的帖子)。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

问题的根源在于query_posts. 您要求WordPress加载页面和模板,并从数据库中提取帖子,然后丢弃这些查询,并使用新参数重复它们。

这就像每天早上向爸爸要一杯茶,然后把它扔掉,说你真的想要咖啡。第一次要咖啡比较容易。

这里的新问题是WordPress已经为您处理了分页,但您只是把它全部扔掉了,而您使用的查询没有分页的概念。如果你在第二页,它怎么知道?您尚未将第2页选项传递到查询中,因此它总是按照您的要求显示第1页。

因此,您应该使用pre_get_posts 滤器这个过滤器在WordPress进入数据库之前运行,允许您更改传入的变量。E、 g。

// only show 4 posts per page on the homepage
function homepage_set_posts_per_page( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 4 );
    }
}
add_filter( \'pre_get_posts\', \'homepage_set_posts_per_page\' );
您可以通过这种方式设置和取消设置查询选项,并使用get 和其他方法进行更具体的检查

如果您需要显示不在主查询/循环中的帖子,可能是针对小部件或边栏,您应该使用WP_Query 对象e、 g。

// lets query the DB for pages
$loop = new WP_Query( array(
    \'post_type\' => \'page\'
));
// did we find posts?
if ( $loop->have_posts() ) {
    // yes we did! yay
    while( $loop->have_posts() ) {
        $loop->the_post();
        // display each post
    }
    // clean up after our loop
    wp_reset_postdata();
} else {
    // no posts found, we don\'t need to cleanup, but we should probably tell the user we found nothing
}
另一方面,您可以将用户指向/category/publicatii 并实现category-publicatii.php 在你的主题中,避开所有的黑客查询等

相关推荐

Count posts for pagination

我正在为一个网站分页<;上一页(页码)下一页>很简单,已经完成。但是现在我需要添加一个选择器来直接转到页面(例如:转到第7页),要这样做,我需要知道有多少页面,为此我需要计算在查询中找到了多少帖子。问题是这个网站有太多的帖子(>13.000),查询所有帖子都会减慢页面加载速度,这就像。。。10秒后页面才能加载。显然,这是不可接受的。分页解决了这个问题,因为一次只加载50或100篇文章,但我无法将它们全部计算在内。我可以在不加载的情况下统计某个查询中的帖子吗?或者我可以通过其他方式获得页数吗