在默认术语链接URL之后进行自定义重写

时间:2019-03-21 作者:somebodysomewhere

我有分类法car 还有一些术语,比如kia, honda, 和toyota.

使用函数get_term_link(), 我可以获得如下术语存档链接:

site.com/car/honda/
我正在尝试使用自定义重写规则来获取此结构:

site.com/car/honda/{$trim}
我的重写规则如下所示:

add_rewrite_rule(
    home_url() . \'/car/([^/]*)/([^/]*)/?\',
    \'index.php?taxonomy=car&term=$matches[1]&model=$matches[1]&trim=$matches[2]\',
    \'top\'
);
但是,它不能正常工作。默认术语“存档链接”有效(site.com/car/honda), 但如果我添加任何内容作为$trim, WordPress重定向到404,这让我相信我的正则表达式根本不匹配。

我的分类法是非层次的。

任何帮助都将不胜感激,谢谢。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

(修改后的答案)

让我们看看重写规则的问题add_rewrite_rule() (这是正则表达式模式)不应以home_url() 或任何输出网站URL的功能。所以这是错误的:

home_url() . \'/car/([^/]*)/([^/]*)/?\'
因为生成的正则表达式(RegEx)模式将是:

http://example.com/car/([^/]*)/([^/]*)/?
这将never be matched, 因为请求(请参阅WP::$request) 从不以网站URL开头。甚至都不是从/.

&model=$matches[1] a部分输入错误?

index.php?taxonomy=car&term=$matches[1]&model=$matches[1]&trim=$matches[2]
现在修复home_url() . \'/car/([^/]*)/([^/]*)/?\' 应为(无尾随/ 开始时):

\'^car/([^/]*)/([^/]*)/?\'
index.php?taxonomy=car&term=$matches[1]&model=$matches[1]&trim=$matches[2] 应该没有&model=$matches[1]:

index.php?taxonomy=car&term=$matches[1]&trim=$matches[2]
然而,即使&model=$matches[1], 在我的情况下,这条规则实际上起了作用。

我不确定您是否已经在代码中的某个地方添加了此参数,但我会添加它,以便在URL中获取“trim”参数的值:

add_rewrite_tag( \'%trim%\', \'([^/]+)\' );
你应该在add_rewrite_rule() 线条,要获取“trim”值,可以使用get_query_var( \'trim\' ).

相关推荐