{"slug":"wordpress-multisite-network","title":"WordPress Multisite Network","tags":["multisite","network","wp-cli","domain-mapping","database"],"agent_summary":"WordPress Multisite setup: enabling network, subdomain vs subdirectory modes, wp-config constants, WP-CLI site management commands, network plugin activation, and custom domain mapping.","trigger_phrases":["wordpress multisite","wp multisite setup","wordpress network","subdomain multisite","domain mapping wordpress","network activate plugin","multisite database tables"],"runnable":true,"markdown":"\nWordPress Multisite manages many sites from a single installation. Use when running multiple branded sites on the same server.\n\n## Enable Multisite\n\n```php\n// Step 1: Add to wp-config.php before \"That's all, stop editing\"\ndefine('WP_ALLOW_MULTISITE', true);\n```\n\nThen: Admin > Tools > Network Setup > Network of Sites > Install.\n\nAfter install wizard, add to wp-config.php:\n\n```php\ndefine('MULTISITE', true);\ndefine('SUBDOMAIN_INSTALL', false);     // false = subdirectory, true = subdomain\ndefine('DOMAIN_CURRENT_SITE', 'example.com');\ndefine('PATH_CURRENT_SITE', '/');\ndefine('SITE_ID_CURRENT_SITE', 1);\ndefine('BLOG_ID_CURRENT_SITE', 1);\n```\n\n## Subdomain vs Subdirectory\n\n| Mode | URL Pattern | DNS Required |\n|------|-------------|--------------|\n| Subdirectory | example.com/site2/ | No extra DNS |\n| Subdomain | site2.example.com | Wildcard A record (`*.example.com`) |\n\n## WP-CLI Multisite Operations\n\n```bash\n# List all sites in network\nwp site list\n\n# Create a new site\nwp site create --slug=newsite --title=\"New Site\" --email=admin@example.com\n\n# Delete a site\nwp site delete 5\n\n# Network-activate a plugin across all sites\nwp plugin activate woocommerce --network\n\n# List network-activated plugins\nwp plugin list --network\n\n# Run command on specific site\nwp --url=example.com/site2 plugin list\n```\n\n## Database Structure\n\nEach site gets prefixed tables (site_id = 2):\n- `wp_2_posts`, `wp_2_postmeta`, `wp_2_options`, `wp_2_terms`\n\nShared across all sites:\n- `wp_users`, `wp_usermeta`, `wp_blogs`, `wp_sitemeta`\n\n## Custom Domain Mapping\n\n1. Install \"WP Multisite Domain Mapping\" or MU plugin\n2. Add custom domain as A record pointing to server IP\n3. Network Admin > Sites > Edit Site > Domain: enter custom domain (e.g., `customdomain.com`)\n4. Ensure SSL covers the custom domain (Let's Encrypt wildcard or per-domain)\n\n## Multisite Plugin Handling\n\n- Network-activated: applies to all sites, managed from Network Admin\n- Site-activated: only applies to that site\n- Must-use (mu-plugins/): auto-loaded, cannot be deactivated by site admins\n","html":"<p>WordPress Multisite manages many sites from a single installation. Use when running multiple branded sites on the same server.</p>\n<h2>Enable Multisite</h2>\n<pre><code class=\"language-php\">// Step 1: Add to wp-config.php before \"That's all, stop editing\"\ndefine('WP_ALLOW_MULTISITE', true);\n</code></pre>\n<p>Then: Admin > Tools > Network Setup > Network of Sites > Install.</p>\n<p>After install wizard, add to wp-config.php:</p>\n<pre><code class=\"language-php\">define('MULTISITE', true);\ndefine('SUBDOMAIN_INSTALL', false);     // false = subdirectory, true = subdomain\ndefine('DOMAIN_CURRENT_SITE', 'example.com');\ndefine('PATH_CURRENT_SITE', '/');\ndefine('SITE_ID_CURRENT_SITE', 1);\ndefine('BLOG_ID_CURRENT_SITE', 1);\n</code></pre>\n<h2>Subdomain vs Subdirectory</h2>\n<p>| Mode | URL Pattern | DNS Required |\n|------|-------------|--------------|\n| Subdirectory | example.com/site2/ | No extra DNS |\n| Subdomain | site2.example.com | Wildcard A record (<code>*.example.com</code>) |</p>\n<h2>WP-CLI Multisite Operations</h2>\n<pre><code class=\"language-bash\"># List all sites in network\nwp site list\n\n# Create a new site\nwp site create --slug=newsite --title=\"New Site\" --email=admin@example.com\n\n# Delete a site\nwp site delete 5\n\n# Network-activate a plugin across all sites\nwp plugin activate woocommerce --network\n\n# List network-activated plugins\nwp plugin list --network\n\n# Run command on specific site\nwp --url=example.com/site2 plugin list\n</code></pre>\n<h2>Database Structure</h2>\n<p>Each site gets prefixed tables (site_id = 2):</p>\n<ul>\n<li><code>wp_2_posts</code>, <code>wp_2_postmeta</code>, <code>wp_2_options</code>, <code>wp_2_terms</code></li>\n</ul>\n<p>Shared across all sites:</p>\n<ul>\n<li><code>wp_users</code>, <code>wp_usermeta</code>, <code>wp_blogs</code>, <code>wp_sitemeta</code></li>\n</ul>\n<h2>Custom Domain Mapping</h2>\n<ol>\n<li>Install \"WP Multisite Domain Mapping\" or MU plugin</li>\n<li>Add custom domain as A record pointing to server IP</li>\n<li>Network Admin > Sites > Edit Site > Domain: enter custom domain (e.g., <code>customdomain.com</code>)</li>\n<li>Ensure SSL covers the custom domain (Let's Encrypt wildcard or per-domain)</li>\n</ol>\n<h2>Multisite Plugin Handling</h2>\n<ul>\n<li>Network-activated: applies to all sites, managed from Network Admin</li>\n<li>Site-activated: only applies to that site</li>\n<li>Must-use (mu-plugins/): auto-loaded, cannot be deactivated by site admins</li>\n</ul>\n"}