你说得对,没有冲水规则,add_rewrite_rule()
不起作用,原因是WordPress从数据库中获取规则add_rewrite_rule()
不将规则添加到数据库。
但是,无法使用admin_init
原因是admin_init
太晚了。
WordPress有时会打电话flush_rewrite_rules()
在之前的管理屏幕上admin_init
被激发(例如here), 确保WordPress调用时添加了规则flush_rewrite_rules()
您需要使用init
(或者可能wp_loaded
).
类似的方法可能会奏效:
function addsomerule() {
if ( is_admin() ) add_rewrite_rule(some regex,some parse result);
}
add_action( \'init\',\'addsomerule\' );
它确保仅在管理请求期间添加规则。
但是if
调用函数的语句在性能方面有(少量)成本,并且考虑到add_rewrite_rule
不是很昂贵(它只向全局数组写入一个值,并且不命中db),那么可能不值得添加该条件。
此外,您并不总是能够控制站点使用的所有代码。如果一些插件调用flush_rewrite_rules()
在前端请求上,您的规则将丢失,因为只在后端添加。
出于所有这些原因,请在上添加重写规则init
不进行任何其他检查可能是正确的做法:它避免了任何问题,并且它在前端请求上增加的少量成本几乎与WordPress启动时间无关,并且在WordPress启动时丢失了。