如何修改查询,使其总共只抓取90个帖子?

时间:2019-02-22 作者:Michael Rogers

我想有3页,每页30篇帖子:Total 90 posts./page/4/ shouldn\'t exist. 应该是404或重定向到主页。

只应存在/、/第/2页和/第/3页。每个都有30个帖子,就像这样:

我尝试了许多建议,没有一个限制了我的查询。只是每页的帖子数量。这看起来很有希望,但没有任何效果(/页/999/works)

function wpcodex_filter_main_search_post_limits( $limit, $query ) {

    if ($query->is_front_page()) {
//this:
return \'90\';
//or even this: 
return \'LIMIT 90\';
    }

    return $limit;
}
add_filter( \'post_limits\', \'wpcodex_filter_main_search_post_limits\', 10, 2 );
一些人建议使用PHP进行计数,并使用if停止显示帖子。这是一个解决方法,我想限制SQL查询。

2 个回复
最合适的回答,由SO网友:Qaisar Feroz 整理而成

尝试使用paginate_links( $args ). 以下是采用的代码codex.

$paged = ( get_query_var( \'paged\' ) ) ? absint( get_query_var( \'paged\' ) ) : 1;

$args = array(
    \'posts_per_page\' => 30,
    \'paged\' => $paged,
);

$the_query = new WP_Query( $args );

// the loop etc goes here.. 

$big = 999999999; 

echo paginate_links( array(
    \'base\'       => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\'     => \'?paged=%#%\',
    \'current\'    => max( 1, get_query_var(\'paged\') ),
    \'prev_next\'  => false,
    \'total\'      => 3
) );
请参见此处的详细信息codex.

SO网友:hamdirizal

您的解决方案不起作用,因为它将当前循环限制为90条记录。It doesn\'t limit the total records.

对于你的问题,你可以paged WordPress执行主循环之前的值。

function override_paged(){
    if(get_query_var(\'paged\')>3){

        //Cap the value
        set_query_var( \'paged\', 3 ); 

        //Or redirect
        //wp_safe_redirect(\'HOME_PAGE_URL\');die();

    }
}
add_action(\'pre_get_posts\',\'override_paged\');
这个will affect 所有WordPress查询,请根据您的要求进行调整。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post