挂钩“DELETE_OPTION_REWRITE_RULES”以添加重写规则

时间:2014-03-25 作者:Scuzzy

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将重写规则更改为更新,而不是删除然后插入。

1 个回复
SO网友:Milo

通过的第4个参数将存储重写配置的选项设置为自动加载add_option:

add_option( \'my_plugin_option\', $my_plugin_options, \'\', \'yes\' );
它将被加载并缓存在每个页面加载时已经运行的查询中,因此这不是问题。

然后可以在正确的挂钩上添加重写规则,即init, 你不必担心。

结束

相关推荐