WordPress插件:如何控制已安装插件页「启用自动更新」链接显示?
关于WordPress插件「启用自动更新」链接的钩子与显示逻辑
核心钩子:plugin_action_links_{$plugin_file}
WordPress中负责在已安装插件页面添加插件操作链接(包括「启用自动更新」)的核心钩子是plugin_action_links_{$plugin_file},其中{$plugin_file}是你的插件主文件路径(比如your-plugin/your-plugin.php)。
默认情况下,WordPress会在检测到插件有可用更新时,通过这个钩子自动注入「启用自动更新」链接;当插件更新至最新版本后,因为没有待处理的更新任务,WP会停止添加这个链接——这就是你看到链接消失的原因。
显示条件与Transient的关联
你猜测的没错,这个链接的显示确实和site_transient_update_plugins transient 直接相关:
- 当你的自定义更新逻辑在
site_transient_update_plugins中写入了该插件的可用更新数据时,WP会判定插件需要更新,进而触发自动更新链接的渲染。 - 当插件处于最新版本时,
site_transient_update_plugins中没有该插件的更新条目,WP的默认逻辑就不会添加这个链接。
自定义显示链接的方法
如果希望插件即使在最新版本时也显示自动更新相关链接,可以手动通过plugin_action_links_{$plugin_file}钩子添加,并结合auto_update_plugin过滤器控制自动更新的开关状态:
1. 添加自定义操作链接
// 替换为你的插件主文件路径 $plugin_basename = 'your-plugin-slug/your-plugin-main-file.php'; add_filter( "plugin_action_links_{$plugin_basename}", 'custom_plugin_auto_update_link' ); function custom_plugin_auto_update_link( $links ) { $auto_update_enabled = (bool) get_site_option( 'auto_update_plugins' )[ $plugin_basename ] ?? false; if ( $auto_update_enabled ) { $links[] = '<a href="' . wp_nonce_url( admin_url( 'plugins.php?action=disable-auto-update&plugin=' . $plugin_basename ), 'disable-auto-update_' . $plugin_basename ) . '" class="disable-auto-update">' . __( '禁用自动更新' ) . '</a>'; } else { $links[] = '<a href="' . wp_nonce_url( admin_url( 'plugins.php?action=enable-auto-update&plugin=' . $plugin_basename ), 'enable-auto-update_' . $plugin_basename ) . '" class="enable-auto-update">' . __( '启用自动更新' ) . '</a>'; } return $links; }
2. 确保插件支持自动更新
通过auto_update_plugin过滤器让WordPress认可你的插件支持自动更新:
add_filter( 'auto_update_plugin', 'allow_custom_plugin_auto_update', 10, 2 ); function allow_custom_plugin_auto_update( $update, $plugin ) { // 替换为你的插件主文件路径 if ( $plugin === 'your-plugin-slug/your-plugin-main-file.php' ) { return true; // 允许自动更新 } return $update; }
补充说明
- 上述代码中的链接使用了WordPress内置的自动更新开关路由,确保和WP原生UI逻辑一致。
- 如果你的自定义更新逻辑需要和WP自动更新系统深度整合,还需要确保
site_transient_update_plugins中的数据格式符合WP的规范(包含new_version、package等字段)。
内容的提问来源于stack exchange,提问作者Suraj Sanwal
相关产品推荐
相关产品推荐

