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

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: ""

$email

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;

}

Leave a Reply

Your email address will not be published. Required fields are marked *