{"id":5709,"date":"2026-02-12T20:45:11","date_gmt":"2026-02-13T01:45:11","guid":{"rendered":"https:\/\/chubes.net\/?documentation=wordpress-multisite-architecture"},"modified":"2026-03-13T03:28:47","modified_gmt":"2026-03-13T07:28:47","slug":"wordpress-multisite-architecture","status":"publish","type":"documentation","link":"https:\/\/chubes.net\/docs\/wordpress-core\/multisite\/wordpress-multisite-architecture\/","title":{"rendered":"WordPress Multisite Architecture"},"content":{"rendered":"<p>WordPress Multisite enables running multiple sites from a single WordPress installation. This document covers the core architecture, terminology, and fundamental concepts.<\/p><h2 class=\"wp-block-heading\">Core Concepts<\/h2><h3 class=\"wp-block-heading\">Network<\/h3><p>A <strong>Network<\/strong> (historically called &quot;site&quot;) is the top-level container that holds multiple sites. A WordPress installation can have one or multiple networks (multi-network setup).<\/p><p><strong>Key properties:<\/strong><\/p><ul class=\"wp-block-list\"><li><code>id<\/code> &#8211; Unique network identifier<\/li><li><code>domain<\/code> &#8211; Network&#8217;s primary domain<\/li><li><code>path<\/code> &#8211; Network&#8217;s path (usually <code>\/<\/code>)<\/li><li><code>site_name<\/code> &#8211; Human-readable network name<\/li><li><code>blog_id<\/code> &#8211; ID of the network&#8217;s main site<\/li><\/ul><p><strong>Class:<\/strong> <code>WP_Network<\/code>\n<strong>Table:<\/strong> <code>wp_site<\/code><\/p><h3 class=\"wp-block-heading\">Site<\/h3><p>A <strong>Site<\/strong> (historically called &quot;blog&quot;) is an individual WordPress site within a network. Each site has its own content, settings, and users with roles.<\/p><p><strong>Key properties:<\/strong><\/p><ul class=\"wp-block-list\"><li><code>blog_id<\/code> \/ <code>id<\/code> &#8211; Unique site identifier<\/li><li><code>site_id<\/code> \/ <code>network_id<\/code> &#8211; Parent network ID<\/li><li><code>domain<\/code> &#8211; Site&#8217;s domain<\/li><li><code>path<\/code> &#8211; Site&#8217;s path<\/li><li><code>registered<\/code> &#8211; Registration timestamp<\/li><li><code>last_updated<\/code> &#8211; Last content update timestamp<\/li><li><code>public<\/code> &#8211; Visibility (1 = public, 0 = private)<\/li><li><code>archived<\/code> &#8211; Archive status<\/li><li><code>mature<\/code> &#8211; Mature content flag<\/li><li><code>spam<\/code> &#8211; Spam flag<\/li><li><code>deleted<\/code> &#8211; Deletion flag<\/li><li><code>lang_id<\/code> &#8211; Language identifier<\/li><\/ul><p><strong>Class:<\/strong> <code>WP_Site<\/code>\n<strong>Table:<\/strong> <code>wp_blogs<\/code><\/p><h3 class=\"wp-block-heading\">Installation Types<\/h3><h4 class=\"wp-block-heading\">Subdomain Installation<\/h4><p>Each site gets its own subdomain:<\/p><ul class=\"wp-block-list\"><li>Main site: <code>example.com<\/code><\/li><li>Child sites: <code>blog1.example.com<\/code>, <code>blog2.example.com<\/code><\/li><\/ul><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;SUBDOMAIN_INSTALL&#039;, true );<\/code><\/pre><\/div><h4 class=\"wp-block-heading\">Subdirectory Installation<\/h4><p>Each site gets its own path:<\/p><ul class=\"wp-block-list\"><li>Main site: <code>example.com<\/code><\/li><li>Child sites: <code>example.com\/blog1\/<\/code>, <code>example.com\/blog2\/<\/code><\/li><\/ul><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;SUBDOMAIN_INSTALL&#039;, false );<\/code><\/pre><\/div><p>Check installation type:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( is_subdomain_install() ) {\n    \/\/ Subdomain installation\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Database Structure<\/h2><h3 class=\"wp-block-heading\">Global Tables (Network-wide)<\/h3><p>These tables are shared across all sites:<\/p><figure class=\"wp-block-table\"><table><thead><tr><th>Table<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>wp_site<\/code><\/td><td>Networks<\/td><\/tr><tr><td><code>wp_sitemeta<\/code><\/td><td>Network metadata<\/td><\/tr><tr><td><code>wp_blogs<\/code><\/td><td>Sites<\/td><\/tr><tr><td><code>wp_blogmeta<\/code><\/td><td>Site metadata<\/td><\/tr><tr><td><code>wp_users<\/code><\/td><td>All users<\/td><\/tr><tr><td><code>wp_usermeta<\/code><\/td><td>User metadata<\/td><\/tr><tr><td><code>wp_signups<\/code><\/td><td>Pending registrations<\/td><\/tr><tr><td><code>wp_registration_log<\/code><\/td><td>Registration log<\/td><\/tr><\/tbody><\/table><\/figure><h3 class=\"wp-block-heading\">Per-Site Tables<\/h3><p>Each site gets its own prefixed tables:<\/p><ul class=\"wp-block-list\"><li>Main site: <code>wp_posts<\/code>, <code>wp_options<\/code>, etc.<\/li><li>Site 2: <code>wp_2_posts<\/code>, <code>wp_2_options<\/code>, etc.<\/li><li>Site N: <code>wp_N_posts<\/code>, <code>wp_N_options<\/code>, etc.<\/li><\/ul><h2 class=\"wp-block-heading\">Global Variables<\/h2><h3 class=\"wp-block-heading\"><code>$current_site<\/code><\/h3><p>The current <code>WP_Network<\/code> object. Access via <code>get_current_site()<\/code> or <code>get_network()<\/code>.<\/p><h3 class=\"wp-block-heading\"><code>$current_blog<\/code><\/h3><p>The current <code>WP_Site<\/code> object. Access via <code>get_site()<\/code>.<\/p><h3 class=\"wp-block-heading\"><code>$blog_id<\/code><\/h3><p>Current site ID. Access via <code>get_current_blog_id()<\/code>.<\/p><h3 class=\"wp-block-heading\"><code>$_wp_switched_stack<\/code><\/h3><p>Stack of site IDs when using <code>switch_to_blog()<\/code>.<\/p><h3 class=\"wp-block-heading\"><code>$switched<\/code><\/h3><p>Boolean indicating if currently switched to another blog.<\/p><h2 class=\"wp-block-heading\">Site Switching<\/h2><p>The site switching mechanism allows code to operate in the context of different sites:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">\/\/ Switch to site 5\nswitch_to_blog( 5 );\n\n\/\/ Do work in site 5&#039;s context\n$posts = get_posts();\n$option = get_option( &#039;blogname&#039; );\n\n\/\/ Switch back\nrestore_current_blog();<\/code><\/pre><\/div><p><strong>What switches:<\/strong><\/p><ul class=\"wp-block-list\"><li>Database table prefix (<code>$wpdb-&gt;prefix<\/code>)<\/li><li>Object cache context<\/li><li>User capabilities (after <code>init<\/code>)<\/li><li>Current blog global (<code>$blog_id<\/code>)<\/li><\/ul><p><strong>What doesn&#8217;t switch:<\/strong><\/p><ul class=\"wp-block-list\"><li>Loaded plugins<\/li><li>Active theme<\/li><li>Loaded PHP files<\/li><\/ul><h3 class=\"wp-block-heading\">Nested Switching<\/h3><p>Switches can be nested; <code>restore_current_blog()<\/code> returns to the previous context:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">switch_to_blog( 2 );\n    switch_to_blog( 3 );\n        \/\/ Now in site 3\n    restore_current_blog(); \/\/ Back to site 2\nrestore_current_blog(); \/\/ Back to original<\/code><\/pre><\/div><p>Check switch status:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( ms_is_switched() ) {\n    \/\/ Currently switched to another blog\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Site Lifecycle<\/h2><h3 class=\"wp-block-heading\">1. Signup (Optional)<\/h3><p>User requests a new site via <code>wp-signup.php<\/code>:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">wpmu_signup_blog( $domain, $path, $title, $user, $user_email, $meta );<\/code><\/pre><\/div><p>Creates pending record in <code>wp_signups<\/code>.<\/p><h3 class=\"wp-block-heading\">2. Activation<\/h3><p>Signup is activated:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">wpmu_activate_signup( $key );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">3. Site Creation<\/h3><p>Site is created in the database:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$blog_id = wpmu_create_blog( $domain, $path, $title, $user_id, $options, $network_id );\n\/\/ Or directly:\n$site_id = wp_insert_site( $data );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">4. Initialization<\/h3><p>Database tables are created and populated:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">wp_initialize_site( $site_id, $args );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">5. Update<\/h3><p>Site properties are updated:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">wp_update_site( $site_id, $data );\nupdate_blog_status( $blog_id, &#039;public&#039;, 0 );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">6. Deletion<\/h3><p>Site is deleted:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">wp_delete_site( $site_id );<\/code><\/pre><\/div><p>This triggers <code>wp_uninitialize_site()<\/code> to drop tables and remove files.<\/p><h2 class=\"wp-block-heading\">Site Status Flags<\/h2><p>Sites can have various status flags:<\/p><figure class=\"wp-block-table\"><table><thead><tr><th>Flag<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>public<\/code><\/td><td>Site is publicly visible<\/td><\/tr><tr><td><code>archived<\/code><\/td><td>Site is archived (read-only)<\/td><\/tr><tr><td><code>mature<\/code><\/td><td>Site contains mature content<\/td><\/tr><tr><td><code>spam<\/code><\/td><td>Site is marked as spam<\/td><\/tr><tr><td><code>deleted<\/code><\/td><td>Site is deleted (soft delete)<\/td><\/tr><\/tbody><\/table><\/figure><p>Each flag triggers corresponding hooks when changed:<\/p><ul class=\"wp-block-list\"><li><code>make_spam_blog<\/code> \/ <code>make_ham_blog<\/code><\/li><li><code>archive_blog<\/code> \/ <code>unarchive_blog<\/code><\/li><li><code>mature_blog<\/code> \/ <code>unmature_blog<\/code><\/li><li><code>make_delete_blog<\/code> \/ <code>make_undelete_blog<\/code><\/li><\/ul><h2 class=\"wp-block-heading\">User Management<\/h2><h3 class=\"wp-block-heading\">Network Users<\/h3><p>Users are global across the network but have roles per-site.<\/p><p>Add user to a site:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">add_user_to_blog( $blog_id, $user_id, $role );<\/code><\/pre><\/div><p>Remove user from a site:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">remove_user_from_blog( $user_id, $blog_id, $reassign );<\/code><\/pre><\/div><p>Get user&#8217;s blogs:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$blogs = get_blogs_of_user( $user_id );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Primary Blog<\/h3><p>Each user has a primary blog stored in user meta:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$primary = get_user_meta( $user_id, &#039;primary_blog&#039;, true );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Super Admins<\/h3><p>Network administrators with full access to all sites:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( is_super_admin() ) {\n    \/\/ Has network-wide privileges\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Constants<\/h2><h3 class=\"wp-block-heading\">Required Constants<\/h3><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;MULTISITE&#039;, true );\ndefine( &#039;SUBDOMAIN_INSTALL&#039;, false ); \/\/ or true\ndefine( &#039;DOMAIN_CURRENT_SITE&#039;, &#039;example.com&#039; );\ndefine( &#039;PATH_CURRENT_SITE&#039;, &#039;\/&#039; );\ndefine( &#039;SITE_ID_CURRENT_SITE&#039;, 1 );\ndefine( &#039;BLOG_ID_CURRENT_SITE&#039;, 1 );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Upload Constants (Legacy)<\/h3><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;UPLOADBLOGSDIR&#039;, &#039;wp-content\/blogs.dir&#039; ); \/\/ Legacy\ndefine( &#039;UPLOADS&#039;, &#039;wp-content\/blogs.dir\/2\/files\/&#039; ); \/\/ Per-site<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Cookie Constants<\/h3><p>Set by <code>ms_cookie_constants()<\/code>:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;COOKIEPATH&#039;, &#039;\/&#039; );\ndefine( &#039;SITECOOKIEPATH&#039;, &#039;\/&#039; );\ndefine( &#039;ADMIN_COOKIE_PATH&#039;, &#039;\/wp-admin&#039; );\ndefine( &#039;COOKIE_DOMAIN&#039;, &#039;.example.com&#039; ); \/\/ Subdomain only<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">File Upload Constants<\/h3><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">define( &#039;WPMU_SENDFILE&#039;, false );     \/\/ X-Sendfile header\ndefine( &#039;WPMU_ACCEL_REDIRECT&#039;, false ); \/\/ X-Accel-Redirect header<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Loading Sequence<\/h2><ol class=\"wp-block-list\"><li><strong><code>ms-load.php<\/code><\/strong> &#8211; Core loading functions<\/li><li><strong><code>ms-default-constants.php<\/code><\/strong> &#8211; Define multisite constants<\/li><li><strong><code>ms-settings.php<\/code><\/strong> &#8211; Bootstrap network and site<\/li><li><strong><code>ms-blogs.php<\/code><\/strong> &#8211; Blog\/site functions<\/li><li><strong><code>ms-site.php<\/code><\/strong> &#8211; Site API (CRUD)<\/li><li><strong><code>ms-network.php<\/code><\/strong> &#8211; Network API<\/li><li><strong><code>ms-functions.php<\/code><\/strong> &#8211; General multisite functions<\/li><li><strong><code>ms-default-filters.php<\/code><\/strong> &#8211; Default hooks<\/li><\/ol><h2 class=\"wp-block-heading\">Query Classes<\/h2><h3 class=\"wp-block-heading\">WP_Site_Query<\/h3><p>Query sites with flexible parameters:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$sites = get_sites( array(\n    &#039;network_id&#039; =&gt; 1,\n    &#039;public&#039;     =&gt; 1,\n    &#039;archived&#039;   =&gt; 0,\n    &#039;spam&#039;       =&gt; 0,\n    &#039;deleted&#039;    =&gt; 0,\n    &#039;number&#039;     =&gt; 100,\n    &#039;orderby&#039;    =&gt; &#039;last_updated&#039;,\n    &#039;order&#039;      =&gt; &#039;DESC&#039;,\n) );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">WP_Network_Query<\/h3><p>Query networks:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$networks = get_networks( array(\n    &#039;number&#039; =&gt; 10,\n) );<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Caching<\/h2><h3 class=\"wp-block-heading\">Site Cache<\/h3><p>Sites are cached in the <code>sites<\/code> cache group:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$site = wp_cache_get( $blog_id, &#039;sites&#039; );<\/code><\/pre><\/div><p>Clear site cache:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">clean_blog_cache( $blog_id );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Network Cache<\/h3><p>Networks are cached in the <code>networks<\/code> cache group:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$network = wp_cache_get( $network_id, &#039;networks&#039; );<\/code><\/pre><\/div><p>Clear network cache:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">clean_network_cache( $network_id );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Global Cache Groups<\/h3><p>These cache groups are shared network-wide:<\/p><ul class=\"wp-block-list\"><li><code>sites<\/code>, <code>site-details<\/code>, <code>site-options<\/code><\/li><li><code>networks<\/code>, <code>blog-details<\/code>, <code>blog-lookup<\/code><\/li><li><code>users<\/code>, <code>usermeta<\/code>, <code>userlogins<\/code>, <code>useremail<\/code>, <code>userslugs<\/code><\/li><li><code>site-transient<\/code>, <code>global-posts<\/code><\/li><\/ul><h2 class=\"wp-block-heading\">Large Network Considerations<\/h2><p>Networks with &gt;10,000 sites or users are considered &quot;large&quot;:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( wp_is_large_network( &#039;sites&#039; ) ) {\n    \/\/ Optimize for large site count\n}\n\nif ( wp_is_large_network( &#039;users&#039; ) ) {\n    \/\/ Optimize for large user count\n}<\/code><\/pre><\/div><p>Live counts are disabled for large networks to improve performance. Counts are updated via scheduled events instead.<\/p><h2 class=\"wp-block-heading\">Error Handling<\/h2><h3 class=\"wp-block-heading\">Site Validation<\/h3><p>Before creating sites, validate the domain\/path:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( domain_exists( $domain, $path, $network_id ) ) {\n    \/\/ Site already exists\n}<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Site Status Checks<\/h3><p>The <code>ms_site_check()<\/code> function validates site status during bootstrap:<\/p><ul class=\"wp-block-list\"><li>Returns drop-in file path for deleted\/inactive\/suspended sites<\/li><li>Super admins bypass these checks<\/li><\/ul><h3 class=\"wp-block-heading\">Database Errors<\/h3><p>Site creation can fail:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">$result = wp_insert_site( $data );\nif ( is_wp_error( $result ) ) {\n    \/\/ Handle: db_insert_error, site_taken, etc.\n}<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Network Options vs Site Options<\/h2><h3 class=\"wp-block-heading\">Network Options (Shared)<\/h3><p>Stored in <code>wp_sitemeta<\/code>, shared across all sites:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">get_site_option( &#039;admin_email&#039; );\nupdate_site_option( &#039;registration&#039;, &#039;user&#039; );\nget_network_option( $network_id, &#039;option_name&#039; );<\/code><\/pre><\/div><h3 class=\"wp-block-heading\">Site Options (Per-Site)<\/h3><p>Stored in each site&#8217;s <code>wp_N_options<\/code>:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">get_option( &#039;blogname&#039; );\nget_blog_option( $blog_id, &#039;option_name&#039; );<\/code><\/pre><\/div><h2 class=\"wp-block-heading\">Site Meta<\/h2><p>Site metadata (stored in <code>wp_blogmeta<\/code>):<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">add_site_meta( $site_id, &#039;key&#039;, &#039;value&#039; );\nget_site_meta( $site_id, &#039;key&#039;, true );\nupdate_site_meta( $site_id, &#039;key&#039;, &#039;new_value&#039; );\ndelete_site_meta( $site_id, &#039;key&#039; );<\/code><\/pre><\/div><p>Check if site meta is supported:<\/p><div class=\"code-block-wrapper\"><div class=\"code-block-header\"><span class=\"code-block-language\">php<\/span><button class=\"code-copy-btn\" aria-label=\"Copy code\"><svg><use href=\"https:\/\/chubes.net\/wp-content\/themes\/chubes\/assets\/icons\/chubes.svg#icon-copy\"><\/use><\/svg><\/button><\/div><pre data-chubes-enhanced class=\"wp-block-code language-php\"><code class=\"language-php\">if ( is_site_meta_supported() ) {\n    \/\/ wp_blogmeta table exists\n}<\/code><\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>WordPress Multisite enables running multiple sites from a single WordPress installation. This document covers the core architecture, terminology, and fundamental concepts. Core Concepts Network A Network (historically called &quot;site&quot;) is&#8230;<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"footnotes":""},"tags":[],"project":[642],"project_type":[749],"class_list":["post-5709","documentation","type-documentation","status-publish","hentry","project-multisite","project_type-wordpress-reference"],"project_info":{"id":589,"name":"WordPress Core","slug":"wordpress-core"},"project_type_info":{"id":749,"name":"WordPress Reference","slug":"wordpress-reference"},"_links":{"self":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation"}],"about":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/types\/documentation"}],"version-history":[{"count":3,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5709\/revisions"}],"predecessor-version":[{"id":8834,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/documentation\/5709\/revisions\/8834"}],"wp:attachment":[{"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/media?parent=5709"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/tags?post=5709"},{"taxonomy":"project","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project?post=5709"},{"taxonomy":"project_type","embeddable":true,"href":"https:\/\/chubes.net\/wp-json\/wp\/v2\/project_type?post=5709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}