多站点网络里启用插件,主站一切正常,切到子站后台就报 WordPress database error 1146 Table 'wp_2_abc_log' doesn't exist。二十多个子站全是同一个错。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

register_activation_hook(__FILE__, function ($network_wide) {
    foreach ($network_wide ? get_sites(["fields" => "ids"]) : [get_current_blog_id()] as $id) {
        switch_to_blog($id); abc_install(); restore_current_blog();
    }
});

网络启用走的是另一个激活钩子,普通的单站激活回调不会为每个子站执行。子站第一次访问时才去查表,那张表根本没建过。这一点先确认清楚,后面就不用反复试。

「多站点网络激活」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,用网络激活钩子遍历所有站点 逐个切换后建表再切回;新站注册时也补一次建表 不要只依赖激活那一次;建表函数写成可重复执行 已存在就跳过。

改完照着核一遍,每个子站后台都不再报 1146,数据库里 wp_2_ 前缀的表已经建好。

作者 9823189