Configuration 覆盖WordPress多站点的WP_站点URL和WP_主页

Configuration 覆盖WordPress多站点的WP_站点URL和WP_主页,configuration,development-environment,wordpress,Configuration,Development Environment,Wordpress,为了在WordPress站点()上进行本地开发,我以前在WP config.php中覆盖了WP\u站点URL和WP\u HOME值,如下所示: define('WP_SITEURL', 'http://local-example/'); define('WP_HOME', 'http://local-example/'); 这将允许我将数据库和站点文件复制到本地服务器,并根据需要进行修改,在本地安装上进行测试 然后有必要将安装转换为WordPress Multisite,以便在主站点和位于子域

为了在WordPress站点()上进行本地开发,我以前在
WP config.php
中覆盖了
WP\u站点URL
WP\u HOME
值,如下所示:

define('WP_SITEURL', 'http://local-example/');
define('WP_HOME', 'http://local-example/');
这将允许我将数据库和站点文件复制到本地服务器,并根据需要进行修改,在本地安装上进行测试

然后有必要将安装转换为WordPress Multisite,以便在主站点和位于子域()上的辅助站点之间共享用户、身份验证、插件等

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

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

您可以使用in functions.php

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

这里有一个类似的问题:我提供了一个可能的解决方案。在你的情况下,你可能不想达到那种程度(尽管这将是非常灵活的);但是,您可以查看答案中提到域替换技术的部分

我在这里概述了这个解决方案:


更新:完整更新的插件代码和其他说明可以在这里找到:
在@user916011的帮助下,我想出了一个解决方案。我需要能够将
wp\u选项
表复制到我的开发环境中,因为它们包含所需的配置。为了克服无法在MultiSite中设置WP_SITEURL和WP_HOME值的问题,我编写了一个自定义过滤器来替换
\u config\u WP_SITEURL()
\u config\u WP_HOME()
可用于非多站点安装的函数,该函数包含在网络范围内可用的插件中,并在
wp config.php
中配置。然后,我可以将所有数据库表(除了
wp_站点
wp_博客
)复制到本地数据库

我强烈推荐Chris Murphy的文章来帮助处理内容中的URL

本例假设一个子域多站点安装,其中一个域为
example.com
,两个子域为
www.example.com
second.example.com
。本地开发URL将分别为
www.example.local
second.example.local

数据库更改

更新
wp\u站点中的域值

UPDATE wp_site SET domain = 'example.local' WHERE domain = 'example.com';
更新
wp\u博客中的域值

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_HOME&WP_SITEURL尽可能类似的解决方案

我不能使用插件,因为我正在与GIT同步,不想在我的repo中使用该插件,我每次都必须添加该插件。。。我想它可以通过wp_sitemeta表在网络范围内激活。。。但这对我来说并不理想

我想出了这个解决办法

确保不同步wp_博客、wp_站点、wp_站点元数据。然后将此代码添加到本地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。

这个问题太老了,无法回答,但最近我遇到了一个类似的情况,我不得不将我的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]
mysql-u[用户名]-p[密码][数据库名]<[文件名]

此解决方案的问题是,当我在本地运行站点时,其URL是
http://local-example/
与数据库值
http://www.example.com
对于主站点。因此,
functions.php
中的所有代码都不会执行,因此选项不会更新。鸡和蛋。很好,这实际上有很多很好的信息,特别是URL标记的替换。不幸的是,在我的案例中,它并没有完全起到帮助作用,因为我需要覆盖实际的数据库值(从我看到的
wp includes/ms settings.php
。基本上,我在另一篇文章中概述了解决方案的案例2。这是一个与wp一致的问题(尽管不是wp本身的问题),不幸的是,这个问题没有简单的解决方案——除非你想做一些代理魔术或在
.htaccess
文件中创建一些非常复杂的路由规则。我对WP MU/多站点的经验是,你需要事先配置你的环境(使用我概述的方法)在开始之前。否则,需要大量SQL查询来替换数据库中的值。从技术上讲,在案例2中,该站点不是活动的,因此我可以根据需要进行任何设置。问题不在于内容本身中的URL,而在于
wp\u options['siteurl']
中保存的URL(主要
mysql -u [user name] -p [password] [database name] < [file anme]