populate_network()
最后更新于:2021-11-27 18:47:08
populate_network( int$network_id=1, string$domain=”, string$email=”, string$site_name=”, string$path=’/’, bool$subdomain_install=false)Populate network settings.
参数
- $network_id
-
(int) (Optional) ID of network to populate.
Default value: 1
- $domain
-
(string) (Optional) The domain name for the network (eg. “example.com”).
Default value: ”
-
(string) (Optional) Email address for the network administrator.
Default value: ”
- $site_name
-
(string) (Optional) The name of the network.
Default value: ”
- $path
-
(string) (Optional) The path to append to the network’s domain name.
Default value: ‘/’
- $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 value: false
响应
(bool|GC_Error) True on success, or GC_Error on warning (with the installation otherwise successful, so the error code must be checked) or failure.
源文件
文件: gc-admin/includes/schema.php
function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $subdomain_install = false ) {
global $gcdb, $current_site, $gc_rewrite;
$errors = new GC_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( (int) $network_id ) ) {
$errors->add( 'siteid_exists', __( 'The network already exists.' ) );
}
} else {
if ( $network_id == $gcdb->get_var( $gcdb->prepare( "SELECT id FROM $gcdb->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 ) {
$gcdb->insert(
$gcdb->site,
array(
'domain' => $domain,
'path' => $path,
)
);
$network_id = $gcdb->insert_id;
} else {
$gcdb->insert(
$gcdb->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,
)
);
$site_user = get_userdata( (int) $gcdb->get_var( $gcdb->prepare( "SELECT meta_value FROM $gcdb->sitemeta WHERE meta_key = %s AND site_id = %d", 'admin_user_id', $network_id ) ) );
/*
* 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 );
$gcdb->insert(
$gcdb->blogs,
array(
'site_id' => $network_id,
'blog_id' => 1,
'domain' => $domain,
'path' => $path,
'registered' => current_time( 'mysql' ),
)
);
$current_site->blog_id = $gcdb->insert_id;
update_user_meta( $site_user->ID, 'source_domain', $domain );
update_user_meta( $site_user->ID, 'primary_blog', $current_site->blog_id );
if ( $subdomain_install ) {
$gc_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
} else {
$gc_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 = gc_remote_get(
'http://' . $hostname,
array(
'timeout' => 5,
'httpversion' => '1.1',
)
);
if ( is_gc_error( $page ) ) {
$errstr = $page->get_error_message();
} elseif ( 200 == gc_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 GC_Error( 'no_wildcard_dns', $msg );
}
}
return true;
}