寄存器激活挂钩(一串 $文件,可调用的 $回调 )

设置插件的停用挂钩。

描述

当一个插件被停用时,将调用动作“deactive_PLUGINNAME”挂钩。在这个钩子的名称中,PLUGINNAME被替换为插件的名称,包括可选的子目录。例如,当插件位于wp-content/plugins/sampleplugin/sample.php中时,此挂钩的名称将变为“deactivate_sampleplugin/sample.php”。

当插件仅包含一个文件并且(默认情况下)位于wp-content/plugins/sample.php时,此挂钩的名称将为“deactive_sample.php.”。

参数

$文件一串必修的
插件的文件名,包括路径。
$回调可调用的必修的
挂接到'停用_PLUGIN'行动。

来源

函数register_dactivation_hook($file,$callback){$file=插件基本名称($file);add_action('deactivate_'.$file,$callback);}

变更日志

版本描述
2.0.0介绍。

用户贡献的笔记

  1. 跳到注释4内容

    示例
    如果您有一个名为我的插件_激活()在主插件文件中

    wp-content/plugins/myplugin.php
    wp-content/plugins/myplugin/myplugin.php
    使用此代码:

    register_deactivationhook(__FILE__,'myplugin_deactivate');

    这将调用我的插件_激活()关闭插件的功能。

  2. 跳到注释5内容

    如果您在主插件文件中使用名称空间
    名称空间MYNAMESAPE;

    您需要在register_dactivation_hook的代码中使用__NAMESPACE__关键字。
    register_deactivation_hook(__FILE__,__NAMESPACE__.'\deactive_plugin');

    否则,代码将无法找到函数deactive_plugin(),并将生成警告:
    PHP警告:call_user_func_array()要求参数1是有效的回调,找不到函数“deactivate_plugin”。

  3. 跳到注释6内容

    值得注意的是,尽管WP 2.0和2.7分别提供了停用和卸载挂钩,但周围仍有许多插件没有正确地进行清理,使数据库中充斥着无用的数据。

    两者之间的有用区别寄存器停用挂钩以及两者寄存器卸载挂钩卸载.php是我们的停用挂钩回调在插件运行时仍处于活动状态这意味着这是最后一次运行作为插件组成部分的代码的机会,而不必刻意加载插件的特定部分或编写非常大的卸载例程。

    因此,为干净卸载准备插件时,您可能需要以下两个工具:(1)针对需要插件内部构件的复杂插件特定任务的停用操作,例如删除用户设置中可变命名的元数据或瞬态,以及(2)卸载操作(或更好的:uninstall.php)运行更广泛/不太复杂的任务,如使用删除选项(),删除插件特定的数据库表或(缓存)文件。

    使用插件内部方法取消激活回调的示例代码,用于常规和网络取消激活:

    register_deactivation_hook(__FILE__,数组('MyPlugin','deactive'));类MyPlugin{// .../***清除插件数据,如果插件不处于活动状态,可能很难找到这些数据。**@自x.x起*/公共静态函数cleanup(){// ...}/***插件停用。**@自x.x起**@param bool$network_deactivating插件是否被网络停用。*/公共静态函数停用($network_deactivating=false){if($network_deactivating&&!wpis_large_network()){$_ids=获取站点(阵列(“字段”=>“id”,‘数字’=>-1,));foreach($_id作为$_id){switch_to_blog($id);self::cleanup();恢复当前日志();}}其他{self::cleanup();}}}

    注意:当你的插件有自定义重写规则,并且你需要在停用时恢复这些规则时,会出现一个特定的问题。一个简单的flush_rewrite_rules()在这里不起作用,这正是因为插件仍处于活动状态。您需要注意撤消所有添加的插件重写规则添加_写入_规则()很遗憾,在刷新之前,有一个简单的函数,如删除_rewrite_rule()尚不存在…

你必须登录在能够发表注释或反馈之前。