wp_insert_site

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

WordPress Version: 6.3

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $site_id = (int) $wpdb->insert_id;
    clean_blog_cache($site_id);
    $new_site = get_site($site_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        /*
         * Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using allowed keys.
         * The `$allowed_data_fields` matches the one used in `wpmu_create_blog()`.
         */
        $allowed_data_fields = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($allowed_data_fields)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use {@see 'wp_initialize_site'} instead.
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_initialize_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 6.1

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $site_id = (int) $wpdb->insert_id;
    clean_blog_cache($site_id);
    $new_site = get_site($site_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using allowed keys.
        // The `$allowed_data_fields` matches the one used in `wpmu_create_blog()`.
        $allowed_data_fields = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($allowed_data_fields)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use {@see 'wp_initialize_site'} instead.
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_initialize_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 5.5

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $site_id = (int) $wpdb->insert_id;
    clean_blog_cache($site_id);
    $new_site = get_site($site_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using allowed keys.
        // The `$allowed_data_fields` matches the one used in `wpmu_create_blog()`.
        $allowed_data_fields = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($allowed_data_fields)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use {@see 'wp_insert_site'} instead.
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 5.4

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    clean_blog_cache($wpdb->insert_id);
    $new_site = get_site($wpdb->insert_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using whitelisted keys.
        // The `$site_data_whitelist` matches the one used in `wpmu_create_blog()`.
        $site_data_whitelist = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($site_data_whitelist)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use {@see 'wp_insert_site'} instead.
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 5.3

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    clean_blog_cache($wpdb->insert_id);
    $new_site = get_site($wpdb->insert_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using whitelisted keys.
        // The `$site_data_whitelist` matches the one used in `wpmu_create_blog()`.
        $site_data_whitelist = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($site_data_whitelist)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use wp_insert_site
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 5.2

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $new_site = get_site($wpdb->insert_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    clean_blog_cache($new_site);
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using whitelisted keys.
        // The `$site_data_whitelist` matches the one used in `wpmu_create_blog()`.
        $site_data_whitelist = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($site_data_whitelist)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use wp_insert_site
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 1.1

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    $prepared_data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($prepared_data)) {
        return $prepared_data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $prepared_data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $new_site = get_site($wpdb->insert_id);
    if (!$new_site) {
        return new WP_Error('get_site_error', __('Could not retrieve site data.'));
    }
    clean_blog_cache($new_site);
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        // WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
        if (!array_key_exists('WPLANG', $meta)) {
            $meta['WPLANG'] = get_network_option($new_site->network_id, 'WPLANG');
        }
        // Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using whitelisted keys.
        // The `$site_data_whitelist` matches the one used in `wpmu_create_blog()`.
        $site_data_whitelist = array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id');
        $meta = array_merge(array_intersect_key($data, array_flip($site_data_whitelist)), $meta);
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use wp_insert_site
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}

WordPress Version: 5.1

/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */
/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site(array $data)
{
    global $wpdb;
    $now = current_time('mysql', true);
    $defaults = array('domain' => '', 'path' => '/', 'network_id' => get_current_network_id(), 'registered' => $now, 'last_updated' => $now, 'public' => 1, 'archived' => 0, 'mature' => 0, 'spam' => 0, 'deleted' => 0, 'lang_id' => 0);
    // Extract the passed arguments that may be relevant for site initialization.
    $args = array_diff_key($data, $defaults);
    if (isset($args['site_id'])) {
        unset($args['site_id']);
    }
    $data = wp_prepare_site_data($data, $defaults);
    if (is_wp_error($data)) {
        return $data;
    }
    if (false === $wpdb->insert($wpdb->blogs, $data)) {
        return new WP_Error('db_insert_error', __('Could not insert site into the database.'), $wpdb->last_error);
    }
    $new_site = get_site($wpdb->insert_id);
    clean_blog_cache($new_site);
    /**
     * Fires once a site has been inserted into the database.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     */
    do_action('wp_insert_site', $new_site);
    /**
     * Fires when a site's initialization routine should be executed.
     *
     * @since 5.1.0
     *
     * @param WP_Site $new_site New site object.
     * @param array   $args     Arguments for the initialization.
     */
    do_action('wp_initialize_site', $new_site, $args);
    // Only compute extra hook parameters if the deprecated hook is actually in use.
    if (has_action('wpmu_new_blog')) {
        $user_id = (!empty($args['user_id'])) ? $args['user_id'] : 0;
        $meta = (!empty($args['options'])) ? $args['options'] : array();
        /**
         * Fires immediately after a new site is created.
         *
         * @since MU (3.0.0)
         * @deprecated 5.1.0 Use wp_insert_site
         *
         * @param int    $site_id    Site ID.
         * @param int    $user_id    User ID.
         * @param string $domain     Site domain.
         * @param string $path       Site path.
         * @param int    $network_id Network ID. Only relevant on multi-network installations.
         * @param array  $meta       Meta data. Used to set initial site options.
         */
        do_action_deprecated('wpmu_new_blog', array($new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta), '5.1.0', 'wp_insert_site');
    }
    return (int) $new_site->id;
}