需要重写规则正则表达式帮助

时间:2020-06-18 作者:Will Fairhurst

希望你能帮忙。。。

我们有一个“serivces”自定义帖子类型,允许“service”有一个父“service”。我们的自定义重写规则适用于顶级服务,但不适用于子服务。

url结构如下所示,其中“测试服务”和“测试服务子项”是帖子名称:

我们现有的重写规则如下:

add_rewrite_rule(\'^consultancy/(.*)/?\', \'index.php?post_type=service&name=$matches[1]\', \'top\');
有谁能建议修改一下,从url的末尾获取帖子名称吗?例如,在上述示例中,它应与以下内容匹配

非常感谢您的帮助。提前感谢,

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

我们的自定义重写规则适用于顶级服务,但不适用于子服务。

您的重写规则或查询second 的参数add_rewrite_rule()) 只是缺少一个service 查询:

add_rewrite_rule( // wrapped for brevity
    \'^consultancy/(.*)/?\',

    // Here, add the &service=$matches[1]
    \'index.php?post_type=service&name=$matches[1]&service=$matches[1]\',

    \'top\'
);
但是,你为什么不使用consultancy 作为重写slug 何时注册帖子类型?

register_post_type( \'service\', [
    \'public\'       => true,
    \'rewrite\'      => [ \'slug\' => \'consultancy\' ],
    \'hierarchical\' => true,
    // .. other args here.
] );
这样,您就不需要自定义重写规则,因为\'slug\' => \'consultancy\' 将为您的;“服务”;发布到consultancy/<post name/slug>.

有人能提出修改建议,从URL的末尾获取帖子名称吗?

您可以使用:

  • get_query_var( \'service\' )get_query_var( \'name\' ) 从当前URL获取完整的帖子名/slug路径。

    所以如果URL是https://example.com/consultancy/test-service/test-service-child, 你会得到test-service/test-service-child.

  • get_queried_object()->post_name 获取所查询帖子的实际帖子名/slug,即没有父路径。

    所以如果URL是https://example.com/consultancy/test-service/test-service-child, get_queried_object()->post_name 将返回test-service-child (请注意child).

相关推荐

要删除文件扩展名的Regex

我正在使用重定向插件,我想用它将旧的静态html页面重定向到新的Wordpress页面。所以基本上任何看起来像http://www.example.com/page.html 成为http://www.example.com/page/唯一的问题是我想排除一个文件夹http://www.example.com/specialfolder/page.html 应保持不变。