WordPress Version: 4.9
/**
* Create a site.
*
* This function runs when a user self-registers a new site as well
* as when a Super Admin creates a new site. Hook to {@see 'wpmu_new_blog'}
* for events that should affect all new sites.
*
* On subdirectory installations, $domain is the same as the main site's
* domain, and the path is the subdirectory name (eg 'example.com'
* and '/blog1/'). On subdomain installations, $domain is the new subdomain +
* root domain (eg 'blog1.example.com'), and $path is '/'.
*
* @since MU (3.0.0)
*
* @param string $domain The new site's domain.
* @param string $path The new site's path.
* @param string $title The new site's title.
* @param int $user_id The user ID of the new site's admin.
* @param array $meta Optional. Array of key=>value pairs used to set initial site options.
* If valid status keys are included ('public', 'archived', 'mature',
* 'spam', 'deleted', or 'lang_id') the given site status(es) will be
* updated. Otherwise, keys and values will be used to set options for
* the new site. Default empty array.
* @param int $network_id Optional. Network ID. Only relevant on multi-network installations.
* @return int|WP_Error Returns WP_Error object on failure, the new site ID on success.
*/
function wpmu_create_blog($domain, $path, $title, $user_id, $meta = array(), $network_id = 1)
{
$defaults = array('public' => 0, 'WPLANG' => get_network_option($network_id, 'WPLANG'));
$meta = wp_parse_args($meta, $defaults);
$domain = preg_replace('/\s+/', '', sanitize_user($domain, true));
if (is_subdomain_install()) {
$domain = str_replace('@', '', $domain);
}
$title = strip_tags($title);
$user_id = (int) $user_id;
if (empty($path)) {
$path = '/';
}
// Check if the domain has been used already. We should return an error message.
if (domain_exists($domain, $path, $network_id)) {
return new WP_Error('blog_taken', __('Sorry, that site already exists!'));
}
if (!wp_installing()) {
wp_installing(true);
}
if (!$blog_id = insert_blog($domain, $path, $network_id)) {
return new WP_Error('insert_blog', __('Could not create site.'));
}
switch_to_blog($blog_id);
install_blog($blog_id, $title);
wp_install_defaults($user_id);
add_user_to_blog($blog_id, $user_id, 'administrator');
foreach ($meta as $key => $value) {
if (in_array($key, array('public', 'archived', 'mature', 'spam', 'deleted', 'lang_id'))) {
update_blog_status($blog_id, $key, $value);
} else {
update_option($key, $value);
}
}
update_option('blog_public', (int) $meta['public']);
if (!is_super_admin($user_id) && !get_user_meta($user_id, 'primary_blog', true)) {
update_user_meta($user_id, 'primary_blog', $blog_id);
}
restore_current_blog();
/**
* Fires immediately after a new site is created.
*
* @since MU (3.0.0)
*
* @param int $blog_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('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $network_id, $meta);
wp_cache_set('last_changed', microtime(), 'sites');
return $blog_id;
}