激活和停用挂钩提供了在插件激活或停用时执行操作的方法。 在激活时,插件可以运行例程来添加重写规则,添加自定义数据库表或设置默认选项值。 在停用时,插件可以运行例程来删除临时数据,如缓存和临时文件和目录。 >[danger] 警报:停用挂钩有时与卸载挂钩混淆。 卸载钩子最适合永久删除所有数据,例如删除插件选项和自定义表等。 ## 启用 要设置激活钩子,请使用register_activation_hook()函数: ``` register_activation_hook( __FILE__, 'pluginprefix_function_to_run' ); ``` ## 停用 要设置停用挂钩,请使用register_deactivation_hook()函数: ``` register_deactivation_hook( __FILE__, 'pluginprefix_function_to_run' ); ``` 每个这些函数中的第一个参数是指您的主插件文件,这是您已经放置插件标题注释的文件。 通常这两个函数将从主插件文件中触发; 但是,如果函数放在任何其他文件中,则必须更新第一个参数以正确指向主插件文件。 ##示例 激活钩子最常见的用途之一是当插件注册自定义帖子类型时刷新WordPress的固定链接。 这摆脱了糟糕的404错误。 我们来看一下如何做到这一点的例子: ``` function pluginprefix_setup_post_types() { // register the "book" custom post type register_post_type( 'book', ['public' => 'true'] ); } add_action( 'init', 'pluginprefix_setup_post_type' ); function pluginprefix_install() { // trigger our function that registers the custom post type pluginprefix_setup_post_type(); // clear the permalinks after the post type has been registered flush_rewrite_rules(); } register_activation_hook( __FILE__, 'pluginprefix_install' ); ``` 如果您不熟悉注册自定义帖子类型,请不要担心 - 稍后将会介绍。 这个例子很简单,因为它很常见。 使用上面的示例,以下是如何反转此过程并停用插件: ``` function pluginprefix_deactivation() { // our post type will be automatically removed, so no need to unregister it // clear the permalinks to remove our post type's rules flush_rewrite_rules(); } register_deactivation_hook( __FILE__, 'pluginprefix_deactivation' ); ``` 有关激活和停用挂钩的更多信息,以下是一些优秀的资源: - register_activation_hook() 在WordPress的功能参考。 - register_deactivation_hook() 在WordPress的功能参考。