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;
}