如何在WP多站点上以编程方式设置“站点地址(URL)”?

时间:2020-03-02 作者:Kirkland

我有一个新的WP multisite配置为默认使用子域。网络站点是在用户注册时以编程方式创建的。我想让用户选择输入自定义域,然后更新Site Address (URL) 为了他们。

What is the WP function used to update this field?

enter image description here

1 个回复
SO网友:Sally CJ

如果您只想更新这一个值,那么可以使用wp_update_site():

wp_update_site( 123, [
    \'domain\' => \'new-slug.domain.com\',
] );
但要真正更新站点URL/地址,您需要同时更新siteurlhome 站点选项:

switch_to_blog( 123 );
update_option( \'siteurl\', \'new URL here\' );
update_option( \'home\',    \'new URL here\' );
restore_current_blog();
下面是一个完整的工作示例,它完成了上述两个步骤:

$main_net = get_network( get_main_network_id() );
$site_id  = 123; // ID of the site you\'re updating

// Update the site domain.
$new_domain = \'enter-slug-here\' . \'.\' . preg_replace( \'|^www\\.|\', \'\', $main_net->domain );
$site_id2   = wp_update_site( $site_id, [
    \'domain\' => $new_domain,
] );

// And then the site URLs.
if ( $site_id2 && ! is_wp_error( $site_id2 ) ) {
    $details     = get_site( $site_id );
    $new_scheme  = parse_url( get_network_option( $site_id, \'siteurl\' ), PHP_URL_SCHEME );
    $url         = $new_scheme . \'://\' . $new_domain;

    switch_to_blog( $site_id );
    $url = untrailingslashit( esc_url_raw( $new_scheme . \'://\' . $details->domain . $details->path ) );
    update_option( \'siteurl\', $url );
    update_option( \'home\',    $url );
    restore_current_blog();
}

其他注意事项确保新域不是reserved word.

Update Apr 04 2020: 这实际上只是用于子目录多站点安装。

确保新域不是existing username.

Update Apr 04 2020: 请忽略这一点,我只是没有真正注意到this 用于。和wp_update_site() 如果域已存在,仍将返回错误。:)

此答案仅适用于子域多站点安装

相关推荐

我在wp_Options表(PhpMyAdmin)中看不到site_url和home_url字段?

我想向你展示这个问题。这是我10年职业生涯中的第一次,过去我曾将许多站点克隆到另一个域,但这是我第一次在Wp\\U选项(phpmyadmin)下看不到“站点URL和主页选项”这是我克隆的域名https://13cabsonline.com.au这是目标域https://silverservice.sydney/我已经通过备份小部件下载并还原了文件。上载文件管理器+数据库,并将数据库与用户连接。但问题是,我无法在phpmyadmin中的Wp\\u options下找到选项。For example: 正常的外