在网络后台停用插件,主站短代码变成纯文本,子站仍正常渲染,插件页面也还能打开。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

foreach (get_sites(['number' => 0]) as $site) {
    switch_to_blog($site->blog_id);
    deactivate_plugins('book-plugin/book.php');
    restore_current_blog();
}

这个插件之前在某几个子站单独激活过,active_plugins 存在 wp_2_options 里。网络停用只改 sitewide 列表,不会动子站自己的激活记录。这一点先确认清楚,后面就不用反复试。

碰到「网络停用插件残留」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

具体做法是,遍历各子站查 active_plugins;用 switch_to_blog 逐个停用;清对象缓存后刷新子站前台。

改完照着核一遍,所有子站短代码输出纯文本,插件菜单从子站后台消失。

作者 9823189