WordPress中可用于追踪插件简单变更的函数或hook有哪些?
WordPress轻量插件变更追踪实现方案
核心可用原生Hook
WordPress原生提供了插件全生命周期的触发钩子,无需额外依赖:
activated_plugin:插件启用完成后触发,回调可获取插件主文件路径、是否网络激活两个参数deactivated_plugin:插件停用完成后触发,参数同上delete_plugin:插件删除执行前触发,回调可获取待删除插件的主文件路径upgrader_process_complete:更新流程完成后触发,需判断更新类型为plugin即可捕获插件更新操作
实现逻辑(完全匹配需求)
1. 注册存储日志的自定义文章类型(CPT)
直接用WordPress原生CPT存储日志,无需额外创建数据库表,天然支持后台列表展示,可关闭公开访问权限仅后台可见,示例注册代码:
add_action('init', function() { register_post_type('plugin_change_log', [ 'labels' => ['name' => '插件变更日志', 'singular_name' => '变更日志'], 'public' => false, 'show_ui' => true, 'show_in_menu' => true, 'supports' => ['title', 'editor'], 'capability_type' => 'post', 'capabilities' => ['create_posts' => 'do_not_allow'], // 禁止手动新建日志 ]); });
2. 封装统一日志写入函数
写一个通用函数处理日志写入逻辑,自动将插件路径转换为插件名称,写入CPT记录:
function write_plugin_log($plugin_file, $action_type) { // 获取插件详情 $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file); $plugin_name = $plugin_data['Name'] ? $plugin_data['Name'] : $plugin_file; // 插入日志 wp_insert_post([ 'post_type' => 'plugin_change_log', 'post_title' => sprintf('%s:%s', $plugin_name, $action_type), 'post_content' => sprintf('插件版本:%s', $plugin_data['Version']), 'post_status' => 'publish', 'post_date' => current_time('mysql'), ]); }
3. 绑定钩子触发日志记录
给四个核心钩子绑定回调,分别对应四种操作类型:
// 插件启用 add_action('activated_plugin', function($plugin_file) { write_plugin_log($plugin_file, '启用'); }); // 插件停用 add_action('deactivated_plugin', function($plugin_file) { write_plugin_log($plugin_file, '停用'); }); // 插件删除 add_action('delete_plugin', function($plugin_file) { write_plugin_log($plugin_file, '删除'); }); // 插件更新 add_action('upgrader_process_complete', function($upgrader, $options) { if ($options['type'] === 'plugin' && isset($options['plugins'])) { foreach ($options['plugins'] as $plugin_file) { write_plugin_log($plugin_file, '更新'); } } }, 10, 2);
4. 可选优化:调整后台日志列表展示
可以通过后台列表钩子自定义列,直接展示变更类型、插件版本等信息,不用点击进详情查看,对应钩子为manage_plugin_change_log_posts_columns和manage_plugin_change_log_posts_custom_column,按需开发即可。
内容的提问来源于stack exchange,提问作者Vit
相关产品推荐
相关产品推荐

