wpmu_create_blog( string $domain, string $path, string $title, int $user_id, array $options = array(), int $network_id = 1 )

Create a site.

Description Description

This function runs when a user self-registers a new site as well as when a Super Admin creates a new site. Hook to ‘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 ‘/’.

Parameters Parameters


(string) (Required) The new site's domain.


(string) (Required) The new site's path.


(string) (Required) The new site's title.


(int) (Required) The user ID of the new site's admin.


(array) (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 value: array()


(int) (Optional) Network ID. Only relevant on multi-network installations.

Default value: 1

Top ↑

Return Return

(int|WP_Error) Returns WP_Error object on failure, the new site ID on success.

Top ↑

Source Source

File: wp-includes/ms-functions.php

function wpmu_create_blog( $domain, $path, $title, $user_id, $options = array(), $network_id = 1 ) {
	$defaults = array(
		'public' => 0,
	$options  = wp_parse_args( $options, $defaults );

	$title   = strip_tags( $title );
	$user_id = (int) $user_id;

	// 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 );

	$site_data_whitelist = array( 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' );

	$site_data = array_merge(
			'domain'     => $domain,
			'path'       => $path,
			'network_id' => $network_id,
		array_intersect_key( $options, array_flip( $site_data_whitelist ) )

	// Data to pass to wp_initialize_site().
	$site_initialization_data = array(
		'title'   => $title,
		'user_id' => $user_id,
		'options' => array_diff_key( $options, array_flip( $site_data_whitelist ) ),

	$blog_id = wp_insert_site( array_merge( $site_data, $site_initialization_data ) );

	if ( is_wp_error( $blog_id ) ) {
		return $blog_id;

	wp_cache_set( 'last_changed', microtime(), 'sites' );

	return $blog_id;

Top ↑

Changelog Changelog

Version Description
MU (3.0.0) Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.