更新答案
要添加指向外部处理程序 PHP 文件的路由,应使用以下 sn-p:
function wprre_add_rewrite_rules() {
global $wp_rewrite;
// pattern with regexps
$wp_rewrite->add_external_rule( '^wp_report/([\w\d-]+)/?', PATH_TO_THE_EXTERNAL_HANDLER.'report.php?report_name=$1' );
}
add_action('init', 'wprre_add_rewrite_rules');
您可以发现 add_external_rule() 和 add_rewrite_rule 之间参数处理的一个区别。您必须使用匹配选择器,因为 Apache 在这种情况下使用它。
这个 sn-p 必须放在一个文件中,该文件总是由你的插件或主题加载。如果您编写插件,它可以是主插件文件。在主题开发的情况下,它可以是主要的functions.php文件。
自定义 GET 参数注册正在正常工作,正如原始答案中提到的那样。
重要
通过代码(外部或内部两者)编辑重写规则后,您必须转到管理面板中的永久链接设置页面,然后单击保存按钮而不进行任何更改。这是必要的,因为这将刷新重写规则,而 WP 会将规则写入 .htaccess 文件。
这就是为什么我建议你挂钩插件激活事件并注册重写规则然后立即运行 flush_rewrite_rules() 命令的原因。
注意事项
原始答案的问题在于,add_rewrite_rule() 函数仅在您路由到默认基本 index.php 时才有效。只能修改参数,不能路由到外部文件。
原答案
我认为您应该使用 WordPress API 来实现这一点。您需要使用以下语法在主题或插件中添加重写规则和标签:
!!免责声明这仅适用于路由到基本 index.php !!
对于路由,添加一个指向您的 PHP 文件的重写规则。
function custom_rewrite_basic() {
add_rewrite_rule('^report/([\w-]+)/?', 'index.php?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
如果要使用标准 WP 参数列表中没有的查询参数,则需要添加该自定义参数名称。
function custom_rewrite_tag() {
add_rewrite_tag('%page%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
如果您不用作 WP API,请注意使用内置参数。
在这篇 Codex 文章中,您可以找到有关该主题的更多详细信息:
https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
为了进行故障排除和更深入的了解,您也可以查看这篇 Codex 文章,该文章描述了正确的重写规则用法。因为在某些情况下您需要重置重写规则(插件激活/停用)。
https://codex.wordpress.org/Function_Reference/flush_rewrite_rules