使用添加_重写_规则和分页时遇到问题

时间:2019-03-29 作者:Brett

我们在网站上有一个部分,例如:

www.example.com/for-sale/category-name/
for-sale 但是,是WP页category-name 是动态的,这就是我编写以下重写规则的目的。

add_rewrite_rule(\'for-sale\\/([a-z-]+)\\/?$\', \'index.php?pagename=for-sale&search_slug=$matches[1]\', \'top\');
但是,当用户需要使用page 查询变量,如果我尝试:

www.example.com/for-sale/category-name/?page=2
它被重写为:

www.example.com/for-sale/2/
所以完全去掉了鼻涕虫这一类。

有什么办法可以让它工作吗?

。。。或者,我希望能够使用这样的东西:

www.example.com/for-sale/category-name/2/
所以我尝试添加这个额外的重写规则:

add_rewrite_rule(\'for-sale\\/([a-z-]+)\\/([0-9])+\\/?$\', \'index.php?pagename=for-sale&search_slug=$matches[1]&page=$matches[2]\', \'top\');
。。但它再次重定向回:

www.example.com/for-sale/2/
我错过了什么?

1 个回复
SO网友:Sally CJ

您的重写规则很好,但重定向之所以发生,是因为WordPress通过其redirect_canonical() 连接到的函数template_redirect.

您可以通过parse_request 这样,我们检查匹配的重写规则是否是您在调用时设置的规则add_rewrite_rule() 如果是,则通过“取消挂钩”取消重定向redirect_canonical()template_redirect 措施:

add_action( \'parse_request\', function( $wp ){
    if ( \'for-sale\\/([a-z-]+)\\/([0-9])+\\/?$\' === $wp->matched_rule ) {
        remove_action( \'template_redirect\', \'redirect_canonical\' );
    }
} );

相关推荐