为了在WordPress网站(http://www.example.com)上进行本地开发,我之前覆盖了WP_SITEURL
中的WP_HOME
和wp-config.php
值,如下所示:
define('WP_SITEURL', 'http://local-example/');
define('WP_HOME', 'http://local-example/');
这样我就可以将数据库和站点文件复制到本地服务器,并根据需要进行修改,在本地安装上进行测试。
然后有必要将安装转换为WordPress多站点,以便可以在主站点和托管在子域(http://second.example.com)上的辅助站点之间共享用户,身份验证,插件等。 / p>
上面覆盖wp_options
表中的值的方法不再有效,但我不确定为wp_blogs
中的条目以及{{1}设置值的正确方法}表用于主域和子域。
更新我的wp_2_options
文件在某种程度上是一种解决方法,但它并不理想(我无法与实时网站进行比较等)。运行脚本来更改数据库值是我尝试过的另一个选项,但稍微麻烦一点,所以我的问题是MultiSite中是否有一个选项可以覆盖设置文件中的这些值,例如HOSTS
,如果是这样的话。
答案 0 :(得分:10)
wp_options
表复制到我的开发环境中,因为它们包含所需的配置。为了克服无法在MultiSite中设置WP_SITEURL和WP_HOME值的问题,我编写了一个自定义过滤器来替换可用于非多站点安装的_config_wp_siteurl()
和_config_wp_home()
函数。一个可在网络范围内使用并在wp-config.php
中配置的插件。然后,我可以将除 wp_site
和wp_blogs
之外的所有数据库表复制到本地数据库。
我强烈推荐Chris Murphy撰写的URL Token Replacement Techniques for WordPress 3.0文章来帮助您处理内容中的网址。
此示例假定子域名为多站点安装,域名为example.com
,两个子域名为www.example.com
和second.example.com
。本地开发网址分别为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
,而第三网址应使用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');
答案 1 :(得分:1)
您可以在functions.php中使用update_option
update_option("siteurl","http://example.com");
update_option("home","http://example.com");
答案 2 :(得分:1)
这里有一个类似的问题:Team Development of a Wordpress Site我提供了一个可能的解决方案。在你的情况下,你可能不想达到这个程度(尽管它会非常灵活);但是,您可以随时查看提及域替换技术的答案部分。
我在这里概述了这个解决方案:URL Token Replacement Techniques...
答案 3 :(得分:1)
我遇到了同样的问题,想要一个类似于定义WP_HOME&amp;的解决方案。 wp-config.php中的WP_SITEURL尽可能。
我无法使用插件,因为我正在与GIT同步,并且不希望在我的仓库中安装该插件而且我每次都要添加插件...我想它可以通过网络激活wp_sitemeta表...但它对我来说并不理想。
我提出了这个解决方案。
请务必不要同步wp_blogs,wp_site,wp_sitemeta。然后将此代码添加到$table_prefix
下面的本地wp-config.php:
/* 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表中并更新其本地网址。
答案 4 :(得分:0)
这个问题太老了,无法回答,但最近我遇到了类似的情况,我必须将我的 wp 站点从临时站点迁移到生产环境,这很痛苦,因为它有 5 个子站点。
摸索了一整天后,我找到了一个简单而有用的解决方案。
当然必须在 wp-config.php 中进行更改。
除此之外,您必须按照以下步骤操作。
使用以下命令生成数据库转储。
mysqldump -u [user name] –p [password] [options] [database_name] [tablename] > [FileName]
然后在任何编辑器中打开该文件。
查找旧域并将其替换为新域。
现在使用您创建的转储恢复数据库。
mysql -u [user name] -p [password] [database name] < [file anme]