8

For doing local development on a WordPress site (http://www.example.com), I was previously overriding the WP_SITEURL and WP_HOME values in wp-config.php like so:

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

This would allow me to copy the database and site files to a local server, and make modifications as necessary, testing on the local install.

It was then necessary to convert the install to a WordPress Multisite so that users, authentication, plugins, etc. could be shared between the main site and a secondary site, hosted on a subdomain (http://second.example.com).

The method above to override the values in the wp_options table no longer works, but I am unsure the proper way to set a value for the entries in wp_blogs as well as the wp_2_options table for the primary and subdomain.

Updating my HOSTS file is somewhat of a workaround, but it not ideal (I am not able to compare to the live site, etc). Running a script to change the database values is another option I have tried, but is slightly more cumbersome, so my questions is whether or not there is an option in MultiSite to override these values in a settings file, such as wp-config.php, and if so what it would look like.

4

5 回答 5

12


更新:可以在此处找到带有附加说明的完整更新插件代码: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. 然后,我可以将除本地数据库之外 wp_site的所有数据库表复制wp_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';

更新 中的域值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并且第三级 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');
于 2012-10-18T18:06:35.423 回答
1

There's a similar question being asked here: Team Development of a Wordpress Site which I provided a possible solution for. In your case, you may not want to go to that extent (though it would be very flexible); however, you could always look at the portion of the answer that mentions a domain-replacement technique.

I've outlined that solution here: URL Token Replacement Techniques...

于 2012-10-18T16:14:22.580 回答
1

您可以在 functions.php 中使用update_option

update_option("siteurl","http://example.com");
update_option("home","http://example.com");
于 2012-10-18T15:40:52.930 回答
1

我遇到了同样的问题,并且想要一个类似于在 wp-config.php 中定义 WP_HOME 和 WP_SITEURL 的解决方案。

我不能使用插件,因为我正在与 GIT 同步并且不想在我的 repo 中有那个插件,我每次都必须添加插件......我想它可以通过 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。

于 2013-05-01T21:46:52.677 回答
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]
于 2021-06-07T14:06:27.307 回答