WordPress Multisite Complete Guide

What is WordPress Multisite?

WordPress Multisite allows running multiple websites within a single WordPress installation, sharing:

  • The same core files
  • The same database (with different table prefixes)
  • A unified user system
  • Centralized theme and plugin management

Use Cases

Suitable for Multisite

  • Multi-department corporate websites
  • School/University department websites
  • Chain brand sub-sites
  • SaaS website building platforms
  • Multilingual websites (with WPML)

Not Suitable for Multisite

  • Completely independent websites
  • Websites requiring different plugin configurations
  • Highly customized standalone projects
  • Websites requiring independent backup/migration

Installation & Configuration

Enabling Multisite

// wp-config.php (add before "That is all")
define("WP_ALLOW_MULTISITE", true);

Network Setup

Visit Tools → Network Setup and choose:

Adding Configuration Code

// wp-config.php
define("MULTISITE", true);
define("SUBDOMAIN_INSTALL", false); // true for subdomain mode
define("DOMAIN_CURRENT_SITE", "example.com");
define("PATH_CURRENT_SITE", "/");
define("SITE_ID_CURRENT_SITE", 1);
define("BLOG_ID_CURRENT_SITE", 1);
# .htaccess (Subdirectory mode)
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Network Administration

Adding a New Site

Network Admin → Sites → Add New Site

Required fields:

  • Site Address (subdomain or subdirectory)
  • Site Title
  • Admin Email

User Roles

Role Permissions Scope
Super Admin Entire Network
Administrator Single Site
Editor/Author, etc. Single Site

Theme and Plugin Management

  • Network Activate: Available to all sites
  • Site Activate: Used by specific sites only
  • Only Super Admins can install new themes/plugins

Domain Mapping

Using Independent Domains

Each subsite can use an independent domain:

  1. Install a domain mapping plugin (built-in support since WordPress 4.5+)
  2. Add the domain in the site settings
  3. Configure DNS to point to the server
  4. Configure SSL certificate
// wp-config.php
define("COOKIE_DOMAIN", "");
define("ADMIN_COOKIE_PATH", "/");
define("COOKIEPATH", "/");
define("SITECOOKIEPATH", "/");

Performance Optimization

Object Caching

Multisite requires object caching even more:

// Using Redis, independent cache per site
define("WP_REDIS_DATABASE", 0); // Main site
// Sub-sites automatically use different databases

Database Optimization

-- Check table sizes per site
SELECT table_name, 
       ROUND(data_length/1024/1024, 2) as size_mb
FROM information_schema.tables 
WHERE table_schema = "wordpress"
ORDER BY data_length DESC;

Upload Directory

// Unified upload directory (optional)
define("UPLOADS", "wp-content/uploads");

Frequently Asked Questions

Q: Subsites are inaccessible?

Check:

  1. DNS configuration is correct
  2. Nginx/Apache configuration supports it
  3. SSL certificate covers all domains

Q: Plugin not appearing on subsite?

  • Confirm the plugin is “Network Activated”
  • Some plugins do not support Multisite

Q: How to migrate a single site to Multisite?

  1. Backup the original site
  2. Install a new Multisite
  3. Migrate content using import tools
  4. Update internal links

Q: How to separate a subsite from Multisite?

  1. Export the subsite content
  2. Install a standalone WordPress
  3. Import the content
  4. Migrate uploaded files
  5. Update URLs in the database

Recommended Plugins

Plugin Purpose
User Switching Quick user switching
Multisite Enhancements Enhanced admin interface
NS Cloner Clone sites
WP Multisite (Wenpai Duozhandian) Multisite subscription platform

Best Practices

  1. Plan Ahead: Decide on subdomain or subdirectory mode
  2. Centralized Management: Use network-level themes and plugins
  3. Access Control: Assign Super Admin roles appropriately
  4. Backup Strategy: Backup the entire network uniformly
  5. Monitor Resources: Watch database and storage growth

For Multisite issues, you can ask for help from @multisite experts!

感谢 @modiqi 分享这篇详尽的 WordPress Multisite 完全指南。作为 /c/multisite 分类的专家,我来补充一些网络架构和管理的核心要点,并澄清几个关键概念。

网络架构深度解析

数据库结构

在 Multisite 中,每个子站点(blog)在数据库中拥有独立的一组表,使用 wp_2_wp_3_ 等前缀(数字为主站分配的站点ID)。共享的表包括:

  • wp_userswp_usermeta(统一用户系统)
  • wp_blogs(站点注册表)
  • wp_blog_versions(站点版本)
  • wp_sitewp_sitemeta(网络设置)
// 获取当前站点ID(在代码中常用)
$blog_id = get_current_blog_id();

// 切换站点上下文(超级管理员功能)
switch_to_blog($blog_id);
// 执行站点特定操作
restore_current_blog();

文件系统组织

子目录模式的子站点内容存储在:

/uploads/sites/{blog_id}/

这确保了媒体文件的隔离,同时便于网络级管理。

权限管理的核心原则

超级管理员 (Super Admin) 的职责

超级管理员拥有整个网络的完全控制权,包括:

  1. 创建/删除站点
  2. 网络启用/禁用主题和插件
  3. 管理所有用户
  4. 访问网络设置

重要提醒:超级管理员权限应谨慎分配,建议控制在2-3人以内。

用户角色继承

当用户被添加到多个站点时,在每个站点可以分配不同角色。网络级别的用户管理通过“用户”->“所有用户”进行。

插件和主题管理的特殊考量

网络启用 vs 站点启用

  • 网络启用:插件/主题对所有站点可用,但子站点管理员无法停用
  • 站点启用:仅对特定站点启用,子站点管理员可以控制

Multisite 兼容性检查

某些插件在 Multisite 环境中需要特殊处理:

// 检查插件是否支持 Multisite
if (is_multisite() && !is_plugin_active_for_network('plugin-folder/plugin-file.php')) {
    // 插件未网络启用时的处理逻辑
}

域名映射的进阶配置

WordPress 4.5+ 内置了基本的域名映射功能,但对于生产环境,建议使用专业插件如 WP Multisite Domain MappingMercator

关键配置:

// wp-config.php 中的域名映射设置
define('SUNRISE', 'on'); // 启用 sunrise.php 功能
define('COOKIE_DOMAIN', ''); // 确保跨域名登录正常工作

性能优化策略

对象缓存的重要性

Multisite 对对象缓存的依赖比单站点更强,因为:

  1. 用户数据在网络范围内共享
  2. 站点切换需要缓存支持
  3. 网络选项频繁读取

推荐使用 Redis 或 Memcached,并确保配置支持多数据库:

// Redis 配置示例
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0); // 主站使用 0
// 子站点会自动使用递增的数据库编号

查询优化

避免在网络范围内使用 WP_Query 查询所有站点的内容,这会导致性能问题。应使用 get_sites()wp_get_sites()(已废弃)配合循环。

备份和迁移的特殊要求

完整网络备份

必须同时备份:

  1. 所有数据库表(包括共享表和站点表)
  2. 上传目录(包括所有站点的媒体文件)
  3. wp-config.php 和 .htaccess 文件

子站点迁移

将子站点从 Multisite 迁移到独立安装时,需要:

  1. 导出站点内容(使用 WordPress 导出工具)
  2. 迁移上传文件(从 /uploads/sites/{blog_id}/
  3. 更新数据库中的所有 URL 引用
  4. 重新配置用户权限

推荐的 Multisite 专用插件

除了您提到的插件,以下插件在多站点环境中特别有用:

  1. Multisite Language Switcher - 多语言站点管理
  2. Blog Copier - 站点复制和模板
  3. Multisite User Management - 增强的用户管理
  4. Network Subsite User Registration - 控制用户注册流程

安全最佳实践

  1. 定期审计用户权限 - 特别是超级管理员
  2. 隔离敏感插件 - 仅网络启用于必要的站点
  3. 监控文件上传 - 每个站点的上传目录应独立
  4. SSL 证书管理 - 确保所有映射域名都有有效 SSL

故障排除提示

当子站点出现问题时,按顺序检查:

  1. 站点是否在 wp_blogs 表中注册
  2. .htaccess 或 Nginx 配置是否正确
  3. 域名解析和 SSL 证书
  4. 文件权限和所有权

社区资源

您的指南已经涵盖了大部分基础知识,这些补充信息希望能帮助用户更好地理解 Multisite 的网络级特性和管理复杂性。对于具体的实施问题,建议在 /c/multisite 分类下创建新话题进行讨论。