如何通过编程方式仅在WordPress多站点子站点激活插件
问题根因
你的activate_plugin()参数传错了,直接触发了网络激活逻辑:
这个函数的第三个参数是$network_wide,接收布尔值,传true就会执行全网络激活,你现在传的是is_multisite(),只要当前是多站点环境,这个返回值永远是true,自然会把插件在所有子站点激活、标记为网络激活状态。
另外你代码里的插件路径还有拼写错误,Akismet的入口文件正确路径是akismet/akismet.php,你写的aksimet.php少了个k,正常会触发插件不存在的报错。
单站点激活正确写法
要在多站点环境下给指定单个子站点激活插件、不触发网络激活,必须先切换到目标子站点的运行上下文,明确把网络激活参数设为false执行激活,操作完切回原站点避免影响其他逻辑,参考代码:
// 改成你需要激活插件的目标子站点ID $target_subsite_id = 3; // 记录当前所在站点,操作完切回 $current_site_id = get_current_blog_id(); // 切换到目标子站点 switch_to_blog( $target_subsite_id ); // 执行激活,第三个参数强制传false,禁止网络激活 activate_plugin( 'akismet/akismet.php', '', false, false ); // 切回原站点 restore_current_blog();
补充说明
- 不要跳过
switch_to_blog()步骤直接调用函数,如果你在网络管理面板上下文执行,哪怕$network_wide传false,激活的也不是你想要的子站点。 - 激活完成后必须调用
restore_current_blog()复位站点上下文,否则后续的站点相关逻辑都会跑到你切换的子站点上,出现异常。
内容的提问来源于stack exchange,提问作者dineshkashera
相关产品推荐
相关产品推荐

