populate_network( int $network_id = 1, string $domain = '', string $email = '', string $site_name = '', string $path = '/', bool $subdomain_install = false ): true|WP_Error

In this article

Populate network settings.

Parameters

$network_idintoptional
ID of network to populate.

Default:1

$domainstringoptional
The domain name for the network. Example: "example.com".

Default:''

$emailstringoptional
Email address for the network administrator.

Default:''

$site_namestringoptional
The name of the network.

Default:''

$pathstringoptional
The path to append to the network’s domain name. Default '/'.

Default:'/'

$subdomain_installbooloptional
Whether the network is a subdomain installation or a subdirectory installation.
Default false, meaning the network is a subdirectory installation.

Default:false

Return

true|WP_Error True on success, or WP_Error on warning (with the installation otherwise successful, so the error code must be checked) or failure.

Source

function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $subdomain_install = false ) {	global $wpdb, $current_site, $wp_rewrite;	$network_id = (int) $network_id;	$errors = new WP_Error();	if ( '' === $domain ) {	$errors->add( 'empty_domain', __( 'You must provide a domain name.' ) );	}	if ( '' === $site_name ) {	$errors->add( 'empty_sitename', __( 'You must provide a name for your network of sites.' ) );	}	// Check for network collision.	$network_exists = false;	if ( is_multisite() ) {	if ( get_network( $network_id ) ) {	$errors->add( 'siteid_exists', __( 'The network already exists.' ) );	}	} else {	if ( $network_id === (int) $wpdb->get_var(	$wpdb->prepare( "SELECT id FROM $wpdb->site WHERE id = %d", $network_id )	) ) {	$errors->add( 'siteid_exists', __( 'The network already exists.' ) );	}	}	if ( ! is_email( $email ) ) {	$errors->add( 'invalid_email', __( 'You must provide a valid email address.' ) );	}	if ( $errors->has_errors() ) {	return $errors;	}	if ( 1 === $network_id ) {	$wpdb->insert(	$wpdb->site,	array(	'domain' => $domain,	'path' => $path,	)	);	$network_id = $wpdb->insert_id;	} else {	$wpdb->insert(	$wpdb->site,	array(	'domain' => $domain,	'path' => $path,	'id' => $network_id,	)	);	}	populate_network_meta(	$network_id,	array(	'admin_email' => $email,	'site_name' => $site_name,	'subdomain_install' => $subdomain_install,	)	);	// Remove the cron event since Recovery Mode is not used in Multisite.	if ( wp_next_scheduled( 'recovery_mode_clean_expired_keys' ) ) {	wp_clear_scheduled_hook( 'recovery_mode_clean_expired_keys' );	}	/* * When upgrading from single to multisite, assume the current site will * become the main site of the network. When using populate_network() * to create another network in an existing multisite environment, skip * these steps since the main site of the new network has not yet been * created. */	if ( ! is_multisite() ) {	$current_site = new stdClass();	$current_site->domain = $domain;	$current_site->path = $path;	$current_site->site_name = ucfirst( $domain );	$wpdb->insert(	$wpdb->blogs,	array(	'site_id' => $network_id,	'blog_id' => 1,	'domain' => $domain,	'path' => $path,	'registered' => current_time( 'mysql' ),	)	);	$current_site->blog_id = $wpdb->insert_id;	$site_user_id = (int) $wpdb->get_var(	$wpdb->prepare(	"SELECT meta_value	FROM $wpdb->sitemeta	WHERE meta_key = %s AND site_id = %d",	'admin_user_id',	$network_id	)	);	update_user_meta( $site_user_id, 'source_domain', $domain );	update_user_meta( $site_user_id, 'primary_blog', $current_site->blog_id );	// Unable to use update_network_option() while populating the network.	$wpdb->insert(	$wpdb->sitemeta,	array(	'site_id' => $network_id,	'meta_key' => 'main_site',	'meta_value' => $current_site->blog_id,	)	);	if ( $subdomain_install ) {	$wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );	} else {	$wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' );	}	flush_rewrite_rules();	if ( ! $subdomain_install ) {	return true;	}	$vhost_ok = false;	$errstr = '';	$hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname!	$page = wp_remote_get(	'http://' . $hostname,	array(	'timeout' => 5,	'httpversion' => '1.1',	)	);	if ( is_wp_error( $page ) ) {	$errstr = $page->get_error_message();	} elseif ( 200 === wp_remote_retrieve_response_code( $page ) ) {	$vhost_ok = true;	}	if ( ! $vhost_ok ) {	$msg = '<p><strong>' . __( 'Warning! Wildcard DNS may not be configured correctly!' ) . '</strong></p>';	$msg .= '<p>' . sprintf(	/* translators: %s: Host name. */	__( 'The installer attempted to contact a random hostname (%s) on your domain.' ),	'<code>' . $hostname . '</code>'	);	if ( ! empty( $errstr ) ) {	/* translators: %s: Error message. */	$msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );	}	$msg .= '</p>';	$msg .= '<p>' . sprintf(	/* translators: %s: Asterisk symbol (*). */	__( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s hostname record pointing at your web server in your DNS configuration tool.' ),	'<code>*</code>'	) . '</p>';	$msg .= '<p>' . __( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '</p>';	return new WP_Error( 'no_wildcard_dns', $msg );	}	}	return true; } 

Changelog

VersionDescription
3.0.0Introduced.

User Contributed Notes

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