覆盖WP_SITEURL和WP_HOME为WordPress多站点(Override WP_SITE

2019-08-01 14:56发布

对于一个WordPress站点(做地方发展http://www.example.com ),我以前重写WP_SITEURLWP_HOMEwp-config.php ,如下所示:

define('WP_SITEURL', 'http://local-example/');
define('WP_HOME', 'http://local-example/');

这将让我的数据库和网站文件复制到本地服务器,并进行必要的修改,测试在本地安装。

就在这时有必要转换的安装到WordPress的多站点,以便用户,认证,插件等,可以在主站点和辅助站点之间共享,托管在一个子域( http://second.example.com )。

上面的方法覆盖值在wp_options表不再工作,但我不能确定正确的方法来设置针对这些项目的值wp_blogs还有wp_2_options主要和子域表。

更新我的HOSTS文件是一种变通方法有点的,但它并不理想(我不能够比较直播网站等)。 运行一个脚本来更改数据库值是另一种选择我都试过了,但稍微繁琐,所以我的问题是,是否有在多点会议一个选项覆盖在设置文件这些值,如wp-config.php ,如果是它会是什么样子。

Answer 1:


更新:额外的描述完全更新的插件代码可以在这里找到: http://justinsilver.com/technology/wordpress/wordpress-plugins/wordpress-plugin-wp-server-migration/
我能够拿出来与@ user916011的帮助下解决方案。 我需要的是能够在复制wp_options桌到我的开发环境,因为它们含有被需要的配置。 为了克服不能够在多站点设置WP_SITEURL和WP_HOME值的问题,我写了一个自定义过滤器,以取代_config_wp_siteurl()_config_wp_home()函数可用于包含在一个插件,非多站点安装可用的网络范围内和在被配置wp-config.php 。 我就能够向所有数据库表的复制wp_sitewp_blogs到本地数据库。

我强烈建议为WordPress 3.0 URL令牌替换技术文章由克里斯·墨菲,以帮助处理中网址的内容。

这个例子假设一个子域多站点安装,使用的域example.com和两个子域, www.example.comsecond.example.com 。 地方发展的URL会www.example.localsecond.example.local分别。

数据库的变化

在更新域值wp_site

UPDATE wp_site SET domain = 'example.local' WHERE domain = 'example.com';

更新的域值(一个或多个) wp_blogs

UPDATE wp_blogs SET domain = 'www.example.local' WHERE domain = 'www.example.com';
UPDATE wp_blogs SET domain = 'second.example.local' WHERE domain = 'second.example.com';

插件代码 :以下插件应安装网络范围内。

<?php
/*
Plugin Name: MultiSite WP_HOME and WP_SITEURL
Plugin URI: http://doublesharp.com/
Description: Allows wp_options values to be overwritten in wp-config.php for MultiSite
Author: Justin Silver
Version: 1.0
Author URI: http://doublesharp.com
License: GPL2
*/

function _ms_config_wp_siteurl( $url = '' ) {
    if (is_multisite()):
        global $blog_id, $current_site;
        $cur_blog_id = defined('BLOG_ID_CURRENT_SITE')? BLOG_ID_CURRENT_SITE : 1;
        $key = ($blog_id!=$cur_blog_id)? $blog_id.'_' : '';
        $constant = 'WP_'.$key.'SITEURL';
        if ( defined( $constant ) )
            return untrailingslashit( constant($constant) );
    endif;
    return $url;
}
add_filter( 'option_siteurl', '_ms_config_wp_siteurl' );

function _ms_config_wp_home( $url = '' ) {
    if (is_multisite()):
        global $blog_id;
        $cur_blog_id = defined('BLOG_ID_CURRENT_SITE')? BLOG_ID_CURRENT_SITE : 1;
        $key = ($blog_id!=$cur_blog_id)? $blog_id.'_' : '';
        $constant = 'WP_'.$key.'HOME';
        if ( defined( $constant ) )
            return untrailingslashit( constant($constant) );
    endif;
    return $url;
}
add_filter( 'option_home',    '_ms_config_wp_home'    );
?>

配置WP-config.php文件

添加新的常量wp-config.php 。 主站点必须使用标准的WP_HOMEWP_SITEURL和第三的网址应该使用WP_{$blog_id}_HOMEWP_{$blog_id}_SITEURL

define('WP_HOME',      'http://www.example.local');
define('WP_SITEURL',   'http://www.example.local');
define('WP_2_HOME',    'http://secondary.example.local');
define('WP_2_SITEURL', 'http://secondary.example.local');


Answer 2:

您可以使用update_option中的functions.php

update_option("siteurl","http://example.com");
update_option("home","http://example.com");


Answer 3:

有一个类似的问题在这里被问: 一个WordPress站点的团队发展 ,我为提供了一个可能的解决方案。 在你的情况,你可能不想去到那种程度(虽然这将是非常灵活的); 但是,你总是可以看看那个提到了域替换技术的答案的一部分。

我已经概述了这里的解决方案: URL令牌替换技术...



Answer 4:

我有同样的问题,并希望为类似的wp-config.php文件尽可能定义WP_HOME&WP_SITEURL的解决方案。

我不能使用的插件,因为我与GIT同步,不希望有该插件在我的回购和我将不得不添加插件每次...我想这可以通过广泛的wp_sitemeta表被激活网络......但它不是理想的我。

我想出了这个解决方案。

确保不同步wp_blogs,wp_site,wp_sitemeta。 然后将此代码添加到您当地的wp-config.php文件下方某处$table_prefix

/* Update local database */
mysql_connect( DB_HOST, DB_USER, DB_PASSWORD ) or die( mysql_error() );
mysql_select_db( DB_NAME );

$result = mysql_query("SELECT * FROM `". $table_prefix ."blogs`") or die( mysql_error() );
while( $row = mysql_fetch_array( $result ) )
{
    $id = (1 == $row['blog_id']) ? '' : $row['blog_id'] .'_';
    mysql_query( "UPDATE `". $table_prefix . $id ."options` SET `option_value`='http://". $row['domain'] ."/' WHERE (`option_name`='siteurl' OR `option_name`='home')" ) or die( mysql_error() );
}

这将确保你的站点同步到本地wp_blogs表。

唯一的缺点是,当你添加一个新的网站,你就需要手动将它复制到你的wp_blogs表,并更新其本地URL。



文章来源: Override WP_SITEURL and WP_HOME for WordPress Multisite