更新: 完整更新的插件代码和附加说明可以在这里找到:
http://justinsilver.com/technology/wordpress/wordpress-plugins/wordpress-plugin-wp-server-migration/
在@user916011 的帮助下,我想出了一个解决方案。我需要能够将
wp_options 表复制到我的开发环境中,因为它们包含所需的配置。为了克服无法在 MultiSite 中设置 WP_SITEURL 和 WP_HOME 值的问题,我编写了一个自定义过滤器来替换可用于非多站点安装的
_config_wp_siteurl() 和
_config_wp_home() 函数,这些函数包含在一个插件中在网络范围内可用,并在
wp-config.php 中配置。然后,我可以将所有数据库表
except wp_site 和
wp_blogs 复制到本地数据库。
我强烈推荐 Chris Murphy 的 URL Token Replacement Techniques for WordPress 3.0 文章来帮助处理您内容中的 URL。
本示例假定子域多站点安装,域为example.com 和两个子域www.example.com 和second.example.com。本地开发 URL 将分别为 www.example.local 和 second.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_HOME 和WP_SITEURL,第三级URL 应使用WP_{$blog_id}_HOME 和WP_{$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');