在不创建分页的情况下将主页帖子限制在10个以内?

时间:2018-10-03 作者:Michael Rogers

我试图只在主页上显示最后10篇帖子,而不创建wp/page/2、/page/3、归档。

我一直在测试,似乎如果禁用分页,它只会抓取服务器崩溃的所有内容。(不要在家里这样做)。

if ( !is_admin() && $query->is_home() && $query->is_main_query() ) {
    $query->set( \'posts_per_page\', 10 );
    $query->set( \'nopaging\' , true );

    }
有人建议“no\\u found\\u rows=true”,但这也不行。

这是不可能做到的吗?看起来它要么创建页面,要么全部显示,没有办法“限制”它?

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

这是一个错误,它将检索个帖子:

  $query->set( \'nopaging\' , true );
您应该做的是:

if ( !is_admin() && $query->is_home() && $query->is_main_query() ) {
    $query->set( \'posts_per_page\', 10 );
    $query->set( \'paged\', \'1\'); // Makes /page/2/, etc links redirect to home
    $query->set( \'no_found_rows\', true ); // Avoid counting rows, faster processing.  

    }
如果您的主题仍在呈现导航按钮,则必须添加一些逻辑以将其隐藏在禁用分页的页面上,对我来说,这就是主页:

if (!is_home()) {
// show pagination buttons
}

SO网友:Milo

如果要阻止API生成分页链接,可以使用found_posts 筛选以使WordPress认为当前查询返回的帖子不会超过10篇。

add_filter( \'found_posts\', \'wpd_disable_home_pagination\', 10, 2 );
function wpd_disable_home_pagination( $found_posts, $query ) {
    if ( !is_admin() && $query->is_home() && $query->is_main_query() && $found_posts > 10 ) {
        return 10;
    }
    return $found_posts;
}
编辑-

您可以重定向任何分页的URL:

add_action( \'pre_get_posts\', \'wpd_redirect_pagination_urls\', 10, 2 );
function wpd_redirect_pagination_urls( $query ) {
    if ( !is_admin() && $query->is_home() && $query->is_main_query() && $query->is_paged() ) {
        wp_redirect( get_post_type_archive_link( \'post\' ) );
        exit;
    }
}

结束

相关推荐

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

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