8

WordPressサイト(http://www.example.com )でローカル開発を行うために、私は以前、次のように値WP_SITEURLWP_HOME値をオーバーライドしていました。wp-config.php

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

これにより、データベースとサイトファイルをローカルサーバーにコピーし、必要に応じて変更を加えて、ローカルインストールでテストすることができます。

次に、インストールをWordPressマルチサイトに変換して、ユーザー、認証、プラグインなどをメインサイトとサブドメイン(http://second.example.com)でホストされているセカンダリサイトの間で共有できるようにする必要がありました。

テーブルの値を上書きする上記の方法は機能しなくなりましたが、プライマリとサブドメインのテーブルだけでなくwp_options、エントリの値を設定する適切な方法がわかりません。wp_blogswp_2_options

ファイルを更新することHOSTSはある程度の回避策ですが、理想的ではありません(ライブサイトなどと比較することはできません)。スクリプトを実行してデータベース値を変更することも私が試したもう1つのオプションですが、少し面倒なので、MultiSiteに、などの設定ファイルでこれらの値をオーバーライドするオプションがあるかどうか、ある場合はどうなるかという質問がありますwp-config.php。のようになります。

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_sitewp_blogs

コンテンツ内のURLの処理に役立つ、 ChrisMurphyによるWordPress3.0のURLトークン置換テクニックの記事を強くお勧めします。

example.comこの例では、ドメインがと2つのサブドメイン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');
于 2012-10-18T18:06:35.423 に答える
1

あなたはfunctions.phpでupdate_optionを使うことができます

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

ここで同様の質問があります:私が可能な解決策を提供したWordpressサイトのチーム開発。あなたの場合、あなたはその程度に行きたくないかもしれません(それは非常に柔軟ですが)。ただし、ドメイン置換技術に言及している回答の部分をいつでも見ることができます。

ここでその解決策の概要を説明しました:URLトークン置換テクニック...

于 2012-10-18T16:14:22.580 に答える
1

私は同じ問題を抱えていて、wp-config.phpでWP_HOMEとWP_SITEURLを定義するのと同じような解決策を望んでいました。

プラグインを使用できません。GITと同期していて、そのプラグインをリポジトリに含めたくないので、毎回プラグインを追加する必要があります...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 に答える