将自定义参数附加到分类/术语URI

时间:2013-02-07 作者:gyo

我有一个Custom Post Type “已命名”Cars“以及2 Custom Taxonomies “”Ferrari“和”Lamborghini“。每个分类法都有2 Terms: “”New“和”Used“。

这些URI按预期工作:

http://myhost/ferrari/new
http://myhost/ferrari/used
当然,问题是,当我在末尾附加汽车ID时,我会得到一个404:

http://myhost/ferrari/new/123
我一直在和add_rewrite_rule/add_rewrite_tag 阅读这里的许多讨论StackExchange 但我找不到解决办法。我也试过了WP Router 它实际上是可行的,但它几乎完全覆盖了默认路由,因此感觉像是黑客攻击。

Question:

我所需要的只是能够将带有附加ID的URI路由到没有附加ID的同一模板,因此我可以从那里使用ID段进行自定义查询。

非常感谢。

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

您可以尝试以下操作:

function my_car_rewrite_rules( $rules ) {
    $newrules = array();

    // add a rule for this kind of url:
    // http://myhost.com/cars/ferrari/used/123
    // => http://myhost.com/index.php?post_type=cars&ferrari=used&p=123 

    $newrules[\'^cars/([^/]+)/([^/]+)/([^/]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
    return $newrules + $rules;
}
add_filter(\'rewrite_rules_array\',\'my_car_rewrite_rules\');
测试时请记住“保存永久链接”。

我补充道/cars/ 因此,此重写不会覆盖其他页面。

您还可以尝试此更严格的规则:

$newrules[\'^cars/([a-z]+)/([a-z]+)/([0-9]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
甚至

$newrules[\'^cars/([ferrari|lamborghini]+)/([used|new]+)/([0-9]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
要从URI中删除CPT(需要为每个分类法执行此操作)

$newrules[\'^ferrari/([^/]+)/([^/]+)$\'] = \'index.php?post_type=cars&$ferrari=$matches[1]&p=$matches[2]\';

结束
将自定义参数附加到分类/术语URI - 小码农CODE - 行之有效找到问题解决它

将自定义参数附加到分类/术语URI

时间:2013-02-07 作者:gyo

我有一个Custom Post Type “已命名”Cars“以及2 Custom Taxonomies “”Ferrari“和”Lamborghini“。每个分类法都有2 Terms: “”New“和”Used“。

这些URI按预期工作:

http://myhost/ferrari/new
http://myhost/ferrari/used
当然,问题是,当我在末尾附加汽车ID时,我会得到一个404:

http://myhost/ferrari/new/123
我一直在和add_rewrite_rule/add_rewrite_tag 阅读这里的许多讨论StackExchange 但我找不到解决办法。我也试过了WP Router 它实际上是可行的,但它几乎完全覆盖了默认路由,因此感觉像是黑客攻击。

Question:

我所需要的只是能够将带有附加ID的URI路由到没有附加ID的同一模板,因此我可以从那里使用ID段进行自定义查询。

非常感谢。

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

您可以尝试以下操作:

function my_car_rewrite_rules( $rules ) {
    $newrules = array();

    // add a rule for this kind of url:
    // http://myhost.com/cars/ferrari/used/123
    // => http://myhost.com/index.php?post_type=cars&ferrari=used&p=123 

    $newrules[\'^cars/([^/]+)/([^/]+)/([^/]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
    return $newrules + $rules;
}
add_filter(\'rewrite_rules_array\',\'my_car_rewrite_rules\');
测试时请记住“保存永久链接”。

我补充道/cars/ 因此,此重写不会覆盖其他页面。

您还可以尝试此更严格的规则:

$newrules[\'^cars/([a-z]+)/([a-z]+)/([0-9]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
甚至

$newrules[\'^cars/([ferrari|lamborghini]+)/([used|new]+)/([0-9]+)$\'] = \'index.php?post_type=cars&$matches[1]=$matches[2]&p=$matches[3]\';
要从URI中删除CPT(需要为每个分类法执行此操作)

$newrules[\'^ferrari/([^/]+)/([^/]+)$\'] = \'index.php?post_type=cars&$ferrari=$matches[1]&p=$matches[2]\';

相关推荐

WordPress URLs without posts

我们正在开发基于WordPress的更大系统,但WordPress只用于“静态”内容,系统的主要部分应该是使用外部API和显示数据。我的观点是:我是否能够告诉URL重写不要对某些URL使用WordPress内部系统,而使用其他系统?E、 g。mysite.com/news/news-title 会显示帖子,但是mysite.com/customcontent/anotherlink 将调用某种机制从API加载数据并显示它。我不知道WordPress是否能做到这一点。。谢谢你的观点。