web-dev-qa-db-ja.com

WordPressマルチブログのデータベース設定を上書きする

私たちのチームは、ワードプレス3マルチブログで作業する問題に出くわしました。通常、サイトのローカルコピー(localhost/testsite)を使用しますが、同じデータベースを使用してすべての変更を最新の状態に保ちます。

Phpからデータベース設定を上書きすることができるので、これは単一インストールではうまく機能します。

define('URL',$path);  
define('WP_HOME',$path);  
define('WP_SITEURL',$path);  
define( 'WP_CONTENT_URL', $path.'/wp-content');  

しかし、追加のテーブル(wp_blogswp_site)があるため、これはマルチサイトでは機能せず、設定にブログへのパスがあります。

誰もがこれらの設定を上書きする方法を知っていますか?私達の開発者のために私は私達の開発者のためのドメインlocalhostで走らせたいと思います、developerdomain.com私たちのテストサーバーのために、そしてrealdomain.comになります。

データベースごとに異なるデータベースを設定し、ドメインとパスを手動で変更してからデータベース間で投稿、ブログ、ユーザーデータをコピーしてデバッグを行い、開発を続ける必要があるとしたら、やり過ぎです。

1

これを正しく実行したいのであれば、開発用に1つ、ステージング用に1つ、次にライブデータベース用に1つのデータベースがあります。それはWordpressがソフトウェア工学のそのようなコモンズと共に生きるように設計されていないということだけです。

まだ一般的に欠けていると思われるコンポーネントは、ドメイン名が投稿に「ハードコード」され、複数の(多くの場合シリアル化された)オプション値に埋め込まれるため、データベース内のすべてのワードプレス設定とデータをドメイン間で変換できる完全な移行スクリプトです。 。

リストに載っているいくつかのオプションについてだけ心配している限り、pre_option_...フィルタにフックしてあなたの設定に基づいてそれらを変更することができます。あなたはあなたの設定ファイルに定義を書き、それに応じて値を変更することができます。これは、データベースから実際の値をフィルタリングしているのと同様に、マルチサイト設定でも機能する可能性があります。

これは方向ですか?

2
hakre

それは私が望むほどエレガントではありませんが、うまくいきます:あなたのhostsファイルをwww.realdomain.comをlocalhostに指すように変更することができます。

Www.realdomain.comへのあなたの要求はそれからあなたのローカルマシンに戻ってきて(すべてが正しく設定されていれば)WordPressを見つけます、そしてそれはそれが決してローカル開発環境であることに気づかないので、正常に動作します。

欠点がありますが、これは非常に迅速かつ汚い修正です。

0
Nabha

さて、これは別の安っぽい解決策ですが、それはうまくいくようです。 www.realdomain.comにリンクしているコンテンツを置き換えるには、もっとしなければならないでしょう。

データベース情報が定義されたら、これをwp-config.phpファイルに入れます。

    if( 'example-local' == $_SERVER['SERVER_NAME'] ) {

        mysql_connect(DB_Host, DB_USER, DB_PASSWORD) or die(mysql_error());
        mysql_select_db(DB_NAME) or die(mysql_error());

        $queries[0] = <<<HEREDOC

        UPDATE wp_blogs
        SET domain="example-local"
        WHERE domain="www.example.org"; 

HEREDOC;

        $queries[1] = <<<HEREDOC

        UPDATE wp_options 
        SET option_value = replace( option_value, "www.example.org", "example-local" ); 

HEREDOC;

        for ($i = 4; $i < 9; $i++) {

            $queries[] = 'UPDATE wp_' . $i . '_options 
        SET option_value = replace( option_value, "www.example.org", "example-local" );';

        }   

        foreach( $queries as $query ) { 

            $result = mysql_query( $query );

            if (!$result) {
                die('Invalid query: ' . mysql_error());
            }

        }

    }
0
Nabha