添加_重写_规则、插件激活和插件停用

时间:2014-11-18 作者:Howard

我看到了很多打电话的例子add_rewrite_rule 在您的init 挂钩,例如。

function add_my_custom_rewrite()
{
   add_rewrite_rule(...
}

add_action(\'init\', \'add_my_custom_rewrite\');
在插件激活挂钩中,

register_activation_hook( __FILE__, \'my_plugin_activation\');

function my_plugin_activation()
{
   add_my_custom_rewrite();
   flush_rewrite_rules(false);
}
所以,当你的插件被激活时,你的重写将被刷新到db中,看起来很有效,but, there is a main problem

当人们停用你的插件时,删除重写仍然不能解决问题,你不能简单地放置flush_rewrite_rules 在停用挂钩中,因为在停用之前已经调用了init,所以无法删除现有的重写规则。,e、 g。

register_deactivation_hook( __FILE__, \'my_plugin_deactivation\');

function my_plugin_deactivation()
{
   flush_rewrite_rules(false); // will not work, since init (hence add_my_custom_rewrite) was already called at this point
}
有没有更好的方法来解决add\\u rewrite\\u规则、插件激活和插件停用之间的冲突?

1 个回复
SO网友:Matthew Boynes

通话问题flush_rewrite_rules() 就是当你的插件的钩子仍然处于活动状态时,规则会立即重新生成。

我通常做的是删除rewrite_rules 激活/停用选项。然后,规则将在下一个页面加载时重新生成,而不是在当前页面加载时重新生成:

register_deactivation_hook( __FILE__, \'my_plugin_deactivation\');
function my_plugin_deactivation() {
   delete_option( \'rewrite_rules\' );
}
一个更理想的解决方案是在刷新之前从堆栈中删除规则,但这样做有点痛苦(请参阅https://core.trac.wordpress.org/ticket/29118).

结束