覆盖WordPress Multisite的WP_SITEURL和WP_HOME

dou*_*arp 7 wordpress configuration development-environment

为了在WordPress网站(http://www.example.com)上进行本地开发,我之前就像这样覆盖了WP_SITEURLWP_HOMEwp-config.php:

define('WP_SITEURL', 'http://local-example/');
define('WP_HOME', 'http://local-example/');
Run Code Online (Sandbox Code Playgroud)

这将允许我将数据库和站点文件复制到本地服务器,并根据需要进行修改,在本地安装上进行测试.

然后有必要将安装转换为WordPress多站点,以便在主站点和托管在子域(http://second.example.com)上的辅助站点之间共享用户,身份验证,插件等.

上面覆盖wp_options表中的值的方法不再有效,但我不确定为主要和子域wp_blogswp_2_options表以及表设置值的正确方法.

更新我的HOSTS文件有点是一种解决方法,但它并不理想(我无法与实时网站进行比较等).运行脚本来更改数据库值是我尝试过的另一个选项,但稍微麻烦一点,所以我的问题是MultiSite中是否有一个选项可以在设置文件中覆盖这些值,例如wp-config.php,如果是这样的话看起来像.

dou*_*arp 10


更新:完整更新的插件代码及其他说明可在此处找到: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本地数据库.

我强烈推荐Chris Murphy撰写的WordPress 3.0 URL令牌替换技术文章,以帮助处理内容中的URL.

此示例假定子域多站点安装,具有域example.com和两个子域,www.example.com以及second.example.com.本地开发URL将分别为www.example.localsecond.example.local.

数据库变更:

更新域值wp_site:

UPDATE wp_site SET domain = 'example.local' WHERE domain = 'example.com';
Run Code Online (Sandbox Code Playgroud)

更新以下域中的域值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';
Run Code Online (Sandbox Code Playgroud)

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

<?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'    );
?>
Run Code Online (Sandbox Code Playgroud)

配置wp-config.php:

添加新常量wp-config.php.主站点应使用标准WP_HOME,WP_SITEURL并且第三个URL应使用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');
Run Code Online (Sandbox Code Playgroud)