WP多站点中wp_update_plugins钩子无法更新插件的问题求助
解决WordPress多站点插件更新触发与Cron疑问
一、网络级别wp_update_plugins钩子的触发方法
1. 手动触发
- 后台操作:直接进入网络管理后台的「插件」页面,点击「检查更新」按钮,即可触发网络级插件更新检查,覆盖所有子站点。
- 自定义代码触发:在主题
functions.php或自定义插件中添加以下代码,使用超级管理员账号访问站点前端即可触发,执行后记得删除代码避免重复触发:
if (is_super_admin()) { // 触发网络级插件更新检查 wp_update_plugins(); // 同步所有子站点的插件更新状态 foreach (get_sites() as $site) { switch_to_blog($site->blog_id); wp_update_plugins(); restore_current_blog(); } }
2. 自动触发(定时任务)
- WP Crontrol配置:在网络管理后台使用WP Crontrol创建定时任务,选择「PHP代码」类型,填入上述网络级更新代码,设置执行周期(如每日一次)。
- 服务器定时任务(推荐):通过服务器Crontab添加WP-CLI命令,直接在网络层面自动更新插件:
# 每天凌晨2点执行网络插件更新 0 2 * * * cd /你的WordPress安装目录 && wp plugin update --all --network
二、关于网络级别wp-cron.php的疑问
你了解的内容是正确的:WordPress没有原生的网络级wp-cron.php文件,所有默认Cron任务均基于单个站点。若需实现网络级定时操作,可通过两种方式:
- 在主站点的Cron任务中加入遍历子站点的逻辑,用
switch_to_blog切换站点执行对应操作; - 使用WP-CLI的服务器定时任务,跳过WP原生Cron系统,直接执行网络级命令,稳定性更高。
额外说明:子站点无法更新插件的原因
默认情况下,WordPress多站点的子站点管理员没有插件更新权限,所有插件管理(含更新)需在网络管理后台操作。若需开放子站点插件更新权限,可通过自定义代码分配update_plugins权限,但会打破多站点集中管理逻辑,需谨慎操作。
内容的提问来源于stack exchange,提问作者Niska
相关产品推荐
相关产品推荐

