gpt4 book ai didi

regex - WordPress 重写规则

转载 作者:行者123 更新时间:2023-12-04 19:37:24 25 4
gpt4 key购买 nike

更新

我已经阅读了关于重写 API 的 codex 文档,现在我的 functions.php 中有以下内容:

function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=$matches[1]-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');

是的,调整后我要去永久链接页面刷新规则。行为是相同的,即 404s 以上的规则,即使该页面确实存在并且我可以通过直接在地址栏中键入来访问它。但是,如果我像这样对其中一个正则表达式匹配项进行硬编码:

function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=a-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');

然后一切都按预期工作,查询变量设置正确。想法?


原始问题

我一直在尝试让 Wordpress 重写规则工作很长一段时间,但我完全不明白为什么以下代码(在 functions.php 中)不起作用:

function my_rewrite_rules($rules) {
$my_rules = array('(a|b|c|d)/?$' => 'index.php?pagename=$matches[1]-overview&my_var=somevar');

return array_merge($my_rules, $rules);
}
add_filter('page_rewrite_rules', 'my_rewrite_rules');

我禁用了规范重定向,只重写了 404。如果启用了重定向,它会转到正确的页面,但我的查询变量会被删除。如果我删除“$matches[1]”并将其替换为 a、b、c 或 d,则在禁用规范重定向的情况下,一切都按预期工作。我知道有一些解决方法,但我只想了解为什么以下方法不起作用?谢谢!

最佳答案

显然在 Wordpress 的 url_to_post() 函数中将 $matches 变量直接放在 pagename 查询变量之后被视为一种特殊情况。这是 code 的一个片段:

if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
// this is a verbose page match, lets check to be sure about it
if ( ! get_page_by_path( $matches[ $varmatch[1] ] ) )
continue;
}

如果我没看错的话,Wordpress 似乎(错误地)假设 $matches 变量应该匹配页面路径。因此,在您的示例中,如果您没有名为 abcd 的页面您的重写规则将被完全跳过(将调用 continue )。

我从阅读 Wordpress 代码中推断出这一点,但我没有测试我的理论(实际上我从来没有使用过 Wordpress)。您可以通过创建一个名为 abcd 的页面并运行来测试我的理论你的代码了。如果我是正确的,这应该使您的规则有效。我建议不要在您的页面名称后面使用 -overview ,从而解决问题。

关于regex - WordPress 重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13686069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com