See 2015.07.24 and 2017.01.25 Updates Bellow...
我正试图找到最有效的方法来确保我的word press“重写规则”在另一个插件调用
flush_rules()
作用
传统上,我看过关于在插件的每个页面加载上添加规则的说明(例如here)
add_action(\'wp_loaded\',\'define_rules_here\');
function define_rules_here()
{
add_rewrite_rule($foo,$bar,$yams);
}
我担心的是,我编写插件的方式是,重写规则可由用户配置,而且每次加载页面时都必须从数据库加载选项,这似乎效率低下。
我发现关于以下内容的信息很少,但它似乎同样有效。。。
add_action(\'delete_option_rewrite_rules\',\'define_rules_here\');
function define_rules_here()
{
add_rewrite_rule($foo,$bar,$yams);
}
我发现第一件事
flush_rules()
呼叫是
delete_option(\'rewrite_rules\');
这似乎很好地触发了我的钩子
delete_option
函数以
do_action( "delete_option_$option", $option );
呼叫
我的问题是:这种挂接“delete\\u option\\u rewrite\\u rules”操作的方法有什么根本错误吗?
<小时>
Update 2015.07.24:
使用
delete_option_rewrite_rules
是不好的,因为如果该选项通过其他方式被删除,它不会被触发,相反,我已经上钩了
delete_option
使用
$option
参数,因为它总是在选项删除之前触发
delete_option_*
这是基于数据库结果的有条件的。
add_action(\'delete_option\',\'handle_deleted_option\');
function handle_deleted_option($option)
{
if($option === \'rewrite_rules\')
{
define_rules_here();
}
}
function define_rules_here()
{
add_rewrite_rule($foo,$bar,$yams);
}
<小时>
Update 2017.01.25:
您还应该添加对的支持
add_action(\'update_option\',\'handle_deleted_option\');
由于wordpress将重写规则更改为更新,而不是删除然后插入。