本文约 2,015 字,预计阅读 6 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:同一个插件,两种装法,行为完全不同
在多站点里,你可能会发现一个怪现象:插件在网络后台启用了,子站管理员却在插件列表里看不到它;或者插件在 A 子站启用了,B 子站又能单独启用一次,两边的设置互不相干。
这不是 bug,而是多站点的设计:网络启用是”全局生效”,单站启用是”局部生效”,数据存在不同的地方。
原理分析:数据存在哪儿
| 启用方式 | 设置存储位置 | 生效范围 | 子站能否停用 |
|---|---|---|---|
| 网络启用 | 主站 wp_options |
所有子站 | 不能 |
| 单站启用 | 子站 wp_2_options |
仅本站 | 能 |
| mu-plugins | 无设置界面(代码控制) | 所有子站 | 不能,且后台不可见 |
这就解释了一个常见困惑:子站管理员进入了 SEO 插件的设置页,改完保存,结果配置写到了主站 wp_options,所有子站都跟着变。
反过来,如果插件被网络启用,但某个子站之前已经单站启用过,可能出现两套配置并存,行为取决于插件实现(多数以网络级为准)。
保姆级实操:判断标准与操作
判断标准一:是否需要统一配置?
- 是(缓存、安全、SMTP、SEO 基础设置)→ 网络启用;
- 否(表单、展示类、各站需求不同)→ 允许单站启用。
判断标准二:插件是否支持多站点?
查插件详情页的 “Compatible with WordPress Multisite” 或看插件是否有网络设置页。不支持多站点的插件被网络启用后,可能在子站后台报错或行为异常。
判断标准三:是否需要子站管理员自助?
如果子站有独立运营者,允许单站启用能减少你的工单量,代价是需要管控插件质量。
操作:网络启用
wp plugin install redis-cache --network-activate
# 或
wp plugin activate redis-cache --network
后台路径:网络管理 → 插件 → 网络启用。
操作:允许子站自行启用
网络管理 → 设置 → 勾选”插件”菜单(启用插件管理菜单给站点管理员)。之后子站后台才会出现”插件”菜单。
操作:子站单独启用
wp --url=shanghai.mimangfei.com plugin activate contact-form-7
操作:查看启用状态
wp plugin list --fields=name,status
wp --url=shanghai.mimangfei.com plugin list --fields=name,status
status 字段里 active-network 表示网络启用,active 表示单站启用。
第三种形态:mu-plugins
wp-content/mu-plugins/ 下的 PHP 文件会被自动加载,对所有站点强制生效,后台完全不可见也不可停用。
mkdir -p wp-content/mu-plugins
cat > wp-content/mu-plugins/force-settings.php <<'PHP'
<?php
// 强制所有站点禁用 XML-RPC
add_filter('xmlrpc_enabled', '__return_false');
PHP
注意:mu-plugins 只加载根目录下的 .php,子目录里的文件不会被自动加载,需要自己在入口文件里 require。
常见踩坑与失败案例
- 网络启用后子站设置改不动 —— 插件设置存在主站,子站点保存后跳转主站。这是预期行为,向子站管理员说明即可。
- 案例:某网络把缓存插件网络启用,各子站管理员都去改缓存规则,结果互相覆盖,最后谁的都配不对。解决方式是在网络级统一配好,然后在子站后台隐藏该插件菜单(用 Adminimize 或自定义代码移除菜单)。
- 同一插件既网络启用又单站启用 —— 可能出现重复加载资源(CSS/JS 加载两次)。排查方式是看页面源码有没有重复句柄。
--network参数漏写 ——wp plugin activate xxx只在主站启用,子站不会生效。- mu-plugins 更新 —— 只能通过文件系统更新,后台没有更新提示,容易忘记维护。
- 插件激活钩子不触发 —— 网络启用时,插件的
register_activation_hook只在主站执行一次,子站的初始化逻辑需要在代码里自行处理(如遍历wp site list)。
总结
选择启用方式的核心依据是”配置要不要统一”。基础设施类网络启用并锁定,业务类放开给子站是通用做法。另外,需要”强制生效且不允许改动”的代码,放 mu-plugins 是最干净的方案——它不会出现在任何后台界面,也不需要担心被停用。最后提醒一句:网络启用前一定先在测试子站验证兼容性,多站点下插件出错的影响面是全局的。
