Populate network settings.
Parameters
$network_id
int
Optional
ID of network to populate.
Default: 1
$domain
string
Optional
The domain name for the network. Example: "example.com".
Default: ""
string
Optional
Email address for the network administrator.
Default: ""
$site_name
string
Optional
The name of the network.
Default: ""
$path
string
Optional
The path to append to the network"s domain name. Default "/".
Default: "/"
$subdomain_install
bool
Optional
Whether the network is a subdomain installation or a subdirectory installation.
Default false, meaning the network is a subdirectory installation.
Default: false
Return
bool|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
File: wp-admin/includes/schema.php.
View all references
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,
)
);
/*
* 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;
}