Problem with add_rewrite_rule

时间:2020-07-07 作者:Jules

正在尝试重新映射以下内容

/test-sale-yacht/comfortably-numb-262749/
/test-sale-yacht/?yacht_name_id=comfortably-numb-262749
在正则表达式测试仪中进行了一些测试之后,我将以下命令放在新插件的init例程中

add_rewrite_rule(\'test-sale-yacht/([^/]*)?\', \'index.php?name=test-sale-yacht&yacht_name_id=$1\', \'top\');
这看起来和其他的很相似,所以我觉得应该可以

我通过转到“设置”多次重置永久链接>;永久链接和保存仍然不起作用。

试着把它放进去functions.php 在主题中,仍然没有肥皂。

根据一个调试插件,在页面上点击没有规则。

尝试/test-sale-yacht/?yacht_name_id=comfortably-numb-262749, 已经试过了/?name=test-sale-yacht&yacht_name_id=comfortably-numb-262749, 这很有效,但是/test-sale-yacht/comfortably-numb-262749/, 没有什么

完全被蒙蔽了。

朱尔斯

2 个回复
SO网友:mozboz

你错过了WP$matches[1] 匹配的正则表达式的语法。

我想你想要/? 最后也是。

我发现最简单的测试方法是暂时flush_rewrite_rules() 在测试过程中,您无需执行任何其他操作。我有一个类似的正则表达式/foo/catname/index.php?taxonomy=category&term=catname, 这里是我用来开发一个干净的测试WP安装-这对我来说很好。

function foobar() {
    add_rewrite_rule(\'^foo/([^/]+)/?\', \'index.php?taxonomy=category&term=$matches[1]\', \'top\');
    flush_rewrite_rules();
}
add_action(\'init\', \'foobar\', 10, 0);
因此,您可能想尝试:

add_rewrite_rule(\'test-sale-yacht/([^/]+)/?\', \'index.php?name=test-sale-yacht&yacht_name_id=$matches[1]\', \'top\');
编辑:根据@TomJ Nowell的评论,flush\\u rewrite\\u rules是一个昂贵的调用-我建议只在开发人员或流量非常低的网站上执行此操作。

SO网友:Jules

这最终奏效了,不知道为什么我最初没有在重写规则中显示任何内容,但这确实奏效了。

add_rewrite_rule( \'test-sale-yacht/([^/]*)?\', 
    \'index.php?pagename=test-sale-yacht&yacht_name_id=$matches[1]\', \'top\');
使用yacht_name_id 作为筛选器添加

朱尔斯

相关推荐