为什么我的查询第一页以外的任何东西都得了404分?

时间:2017-01-18 作者:syzygy333

我的帖子页面上有一个过滤导航栏,上面有“全部”和一些类别(“策略”、“设计和用户体验”、“技术”和“公司和文化”),可以使用pre_get_posts 显示属于这些特定类别的帖子。

这就是我的functions.php:

function owr_blog_topic_endpoint() {
    add_rewrite_endpoint( \'topic\', EP_ALL );
}
add_action( \'init\', \'owr_blog_topic_endpoint\' );

function owr_pre_get_posts( $query ) {
    $topic = get_query_var( \'topic\' );
    if ( $query->is_home() && $query->is_main_query() && isset( $topic ) ) {
        $query->set( \'category_name\', $topic );
    }
}
add_action( \'pre_get_posts\', \'owr_pre_get_posts\' );  
我一次显示7篇帖子,在页面底部,我使用the_posts_pagination() 生成与其余帖子的页面链接。这很好,因为它显示了属于特定类别的帖子的正确页数。

因此,启用“All”时,URL为/notes 例如,当用户单击“策略”时,URL是/notes/topic/strategy. 当我们转到“All”的第二页时,URL是/notes/page/2 从“策略”中执行同样的操作会生成URL/notes/topic/strategy/page/2, 这就是404发生的地方。

我觉得我需要添加一些其他重写规则,但我不确定。

Edit<因此,我的直觉是正确的,解决方法是添加一些重写规则。以下是我补充的内容:

function owr_blog_rewrite( $rules ) {
    return [
        \'notes/topic/([^/]+)/?$\' => \'topic=$matches[1]\',
        \'notes/topic/([^/]+)/page/([0-9]+)/?$\' => \'topic=$matches[1]&paged=$matches[2]\',
    ] + $rules;
}
add_filter( \'rewrite_rules_array\', \'owr_blog_rewrite\' );  
现在一切正常

1 个回复
SO网友:syzygy333

所以,事实证明我的直觉是正确的,解决方法是添加一些重写规则。以下是我补充的内容:

function owr_blog_rewrite( $rules ) {
    return [
        \'notes/topic/([^/]+)/?$\' => \'topic=$matches[1]\',
        \'notes/topic/([^/]+)/page/([0-9]+)/?$\' => \'topic=$matches[1]&paged=$matches[2]\',
    ] + $rules;
}
add_filter( \'rewrite_rules_array\', \'owr_blog_rewrite\' );  
现在一切正常

相关推荐

Count posts for pagination

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