为安全起见,何时调用`add_rewrite_rule`

时间:2011-08-16 作者:Simon Wheatley

我开始在项目中遇到这样的情况:我正在组合多个插件,这些插件都使用add_rewrite_ruleflush_rewrite_rules 在不同的点。众所周知,calling flush_rewrite_rules on every page load is a bad thing.

当插件A还没有添加重写规则,但插件B调用flush_rewrite_rules. 插件A是一个好公民,不调用flush_rewrite_rules 除非现在需要it\'s 重写规则不再存在。

我一直在寻找一个在规则整理之前调用的操作flush_rewrite_rules, 我可以为我的add_rewrite_rule 调用以确保所有规则在编译之前都存在,但我没有找到。有什么建议吗?

1 个回复
SO网友:Peter Westwood

最简单的解决方案是将add调用挂接到刷新过程中重建规则之前激发的最后一个操作上。

刷新过程的第一部分是删除rewrite\\u rules选项。发生这种情况时,将触发以下操作:

do_action( \'delete_option\', $option );
do_action( "delete_option_$option", $option );
do_action( \'deleted_option\', $option );
注意:如果db中没有rewrite\\u rules选项,则不会触发这些操作,因此您还需要确保在有人调用get\\u选项(“rewrite\\u rules”)时注册您的规则,并且它将返回一个空字符串-get\\u选项中有类似的筛选器,您可以用于此操作。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴