我的帖子页面上有一个过滤导航栏,上面有“全部”和一些类别(“策略”、“设计和用户体验”、“技术”和“公司和文化”),可以使用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\' );
现在一切正常