populate_network_meta

The timeline below displays how wordpress function populate_network_meta has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template !== $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME !== $stylesheet && WP_DEFAULT_THEME !== $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also include the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        'webp',
        'avif',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'user_count' => get_site_option('user_count'),
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 6.3

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template !== $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME !== $stylesheet && WP_DEFAULT_THEME !== $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also include the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        'webp',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'user_count' => get_site_option('user_count'),
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 6.1

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also include the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        'webp',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'user_count' => get_site_option('user_count'),
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 5.8

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also include the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    wp_cache_delete('networks_have_paths', 'site-options');
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        'webp',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 5.5

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also include the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    wp_cache_delete('networks_have_paths', 'site-options');
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 5.4

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    wp_cache_delete('networks_have_paths', 'site-options');
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - Network admins should have a method of editing the network siteurl (used for cookie hash).
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 5.3

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    if (function_exists('clean_network_cache')) {
        clean_network_cache($network_id);
    } else {
        wp_cache_delete($network_id, 'networks');
    }
    wp_cache_delete('networks_have_paths', 'site-options');
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: Site link. */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

WordPress Version: 5.1

/**
 * Creates WordPress network meta and sets the default values.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb          WordPress database abstraction object.
 * @global int  $wp_db_version WordPress database version.
 *
 * @param int   $network_id Network ID to populate meta for.
 * @param array $meta       Optional. Custom meta $key => $value pairs to use. Default empty array.
 */
function populate_network_meta($network_id, array $meta = array())
{
    global $wpdb, $wp_db_version;
    $network_id = (int) $network_id;
    $email = (!empty($meta['admin_email'])) ? $meta['admin_email'] : '';
    $subdomain_install = isset($meta['subdomain_install']) ? (int) $meta['subdomain_install'] : 0;
    // If a user with the provided email does not exist, default to the current user as the new network admin.
    $site_user = (!empty($email)) ? get_user_by('email', $email) : false;
    if (false === $site_user) {
        $site_user = wp_get_current_user();
    }
    if (empty($email)) {
        $email = $site_user->user_email;
    }
    $template = get_option('template');
    $stylesheet = get_option('stylesheet');
    $allowed_themes = array($stylesheet => true);
    if ($template != $stylesheet) {
        $allowed_themes[$template] = true;
    }
    if (WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template) {
        $allowed_themes[WP_DEFAULT_THEME] = true;
    }
    // If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
    if (!wp_get_theme(WP_DEFAULT_THEME)->exists()) {
        $core_default = WP_Theme::get_core_default_theme();
        if ($core_default) {
            $allowed_themes[$core_default->get_stylesheet()] = true;
        }
    }
    wp_cache_delete('networks_have_paths', 'site-options');
    if (!is_multisite()) {
        $site_admins = array($site_user->user_login);
        $users = get_users(array('fields' => array('user_login'), 'role' => 'administrator'));
        if ($users) {
            foreach ($users as $user) {
                $site_admins[] = $user->user_login;
            }
            $site_admins = array_unique($site_admins);
        }
    } else {
        $site_admins = get_site_option('site_admins');
    }
    /* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
    $welcome_email = __('Howdy USERNAME,

Your new SITE_NAME site has been successfully set up at:
BLOG_URL

You can log in to the administrator account with the following information:

Username: USERNAME
Password: PASSWORD
Log in here: BLOG_URLwp-login.php

We hope you enjoy your new site. Thanks!

--The Team @ SITE_NAME');
    $misc_exts = array(
        // Images.
        'jpg',
        'jpeg',
        'png',
        'gif',
        // Video.
        'mov',
        'avi',
        'mpg',
        '3gp',
        '3g2',
        // "audio".
        'midi',
        'mid',
        // Miscellaneous.
        'pdf',
        'doc',
        'ppt',
        'odt',
        'pptx',
        'docx',
        'pps',
        'ppsx',
        'xls',
        'xlsx',
        'key',
    );
    $audio_exts = wp_get_audio_extensions();
    $video_exts = wp_get_video_extensions();
    $upload_filetypes = array_unique(array_merge($misc_exts, $audio_exts, $video_exts));
    $sitemeta = array(
        'site_name' => __('My Network'),
        'admin_email' => $email,
        'admin_user_id' => $site_user->ID,
        'registration' => 'none',
        'upload_filetypes' => implode(' ', $upload_filetypes),
        'blog_upload_space' => 100,
        'fileupload_maxk' => 1500,
        'site_admins' => $site_admins,
        'allowedthemes' => $allowed_themes,
        'illegal_names' => array('www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files'),
        'wpmu_upgrade_site' => $wp_db_version,
        'welcome_email' => $welcome_email,
        /* translators: %s: site link */
        'first_post' => __('Welcome to %s. This is your first post. Edit or delete it, then start writing!'),
        // @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
        'siteurl' => get_option('siteurl') . '/',
        'add_new_users' => '0',
        'upload_space_check_disabled' => is_multisite() ? get_site_option('upload_space_check_disabled') : '1',
        'subdomain_install' => $subdomain_install,
        'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
        'ms_files_rewriting' => is_multisite() ? get_site_option('ms_files_rewriting') : '0',
        'initial_db_version' => get_option('initial_db_version'),
        'active_sitewide_plugins' => array(),
        'WPLANG' => get_locale(),
    );
    if (!$subdomain_install) {
        $sitemeta['illegal_names'][] = 'blog';
    }
    $sitemeta = wp_parse_args($meta, $sitemeta);
    /**
     * Filters meta for a network on creation.
     *
     * @since 3.7.0
     *
     * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
     * @param int   $network_id ID of network to populate.
     */
    $sitemeta = apply_filters('populate_network_meta', $sitemeta, $network_id);
    $insert = '';
    foreach ($sitemeta as $meta_key => $meta_value) {
        if (is_array($meta_value)) {
            $meta_value = serialize($meta_value);
        }
        if (!empty($insert)) {
            $insert .= ', ';
        }
        $insert .= $wpdb->prepare('( %d, %s, %s)', $network_id, $meta_key, $meta_value);
    }
    $wpdb->query("INSERT INTO {$wpdb->sitemeta} ( site_id, meta_key, meta_value ) VALUES " . $insert);
    // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}