追加のネットワーク定数をwp-config.phpに動的に追加します


10

新規ネットワークインストールから始める場合、最初のステップは、wp-config.phpファイルに1行追加された単一サイトインストールです。

define( 'WP_ALLOW_MULTISITE', true );

その後、に移動してTools > Network Setup、ネットワーク名や特権管理者のメールなどの詳細を入力し、最後にボタンをクリックして設定を実行します。

ポップアップの次のステップは、実際には2つのステップです。

  1. 追加追加あなたに定数をwp-config.phpファイル

    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
  2. .htaccessファイルにいくつかのルールを追加します。

単一サイトのインストールは行わないので(その理由はもうありません)、これらの定数を動的にwp-config.phpファイルに追加したいと思います。

define( 'WP_ALLOW_MULTISITE', true );
if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )
{
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
}

そのため、wp-config.php毎回行って再度編集する必要はありません。

第一私の心に入って来た事はのためのDBを確認していた{$wpdb->prefix}sitemetaテーブルが、私は、各サイトの負荷に追加のクエリを行うにはしたくありません。第二私は考える事はかどうかを確認することでしたblogs.dirすでに存在しているが、それはそうではないのです。

質問:オーバーヘッドが大きくないか、パフォーマンスが低下しないように、ネットワーク設定の最初のステップをすでにパスしたことをどのように示すことができますか?


2
あなたはすべてを自動化しようとするはずの:i.imgur.com/OoF9Md7.png
Ünsalコルクマズに

1
実際には信じられないことですが、WPのインストールがマルチサイトになる一方で、プロセスは同じです
JMau

@ÜnsalKorkmaz私の構成設定を見たことがあれば、これがもう1つ先のステップであることを理解できます。次のもの:グラントwp-configジェネレータ。
カイザー2013

ページの読み込みごとに条件が存在するかどうかを確認してから定数を定義する必要がある理由を理解できません。あなたはマルチサイト設定を実行しているのか、そうではありません。あなたはWordPressの自動化の話をしている場合はセットをアップしますがYeoPressのように見ることができgithub.com/wesleytodd/YeoPress
kingkool68

@ kingkool68簡単です。ネットワークインストールをセットアップするたびにこれらの定数のコメントを解除/コメントしたくないので。オーバーヘッドはなく、このステップは単に不要です。いいえ、私はWPセットアップの自動化について話しているのではありません。ところで:YeomanはタスクにGruntを使用しています(上記で説明しました)。
カイザー2013

回答:


1

私はこれをテストしていませんが、そのような解決策を見つける必要がある場合は、if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )上記の条件にスクリプトを追加して、次の方法でそれを実行しようとします。

  • {$wpdb->prefix}sitemetaテーブルのDBを確認してください。
  • 存在しない場合-> falseを返します。
  • 存在する場合->書き換えるWP cronジョブを追加wp-config.php-> trueを返します。

WP cronジョブはwp-config.php、チェックを完全に排除するためにを書き換えます。

このようにして、ネットワークがセットアップされてcronジョブが魔法をかけるまで、追加のDB要求しかありません。

ただし、これは努力する価値があることに注意してください...;)


ところで、スクリプトはファイルを直接変更できwp-config.phpますが、その時点でロックされると思います...
Alain Schlesser

そのcronジョブのアイデアは面白いです:)ありがとうございます。ところで、あなたはあなたの答えを編集することができます。
kaiser 2016年

-1

検査wp-admin/network.phpwp-admin/includes/schema.phpファイル。WP_INSTALLING_NETWORKに基づいて条件を作成できます

更新:

if (is_admin()){
    /* First Step */
    if (!defined( 'WP_ALLOW_MULTISITE')){
            $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

            $my_defines = "/* First we put WP_ALLOW_MULTISITE  */\r\n" .
                    "define('WP_ALLOW_MULTISITE', true); \r\n";

            $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
            file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }   
    /* Second Step */
    if (!defined("WP_DEFINES_IMPORTED") && defined("WP_INSTALLING_NETWORK") && $_POST){
        $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

        $my_defines = "/* Now we define */\r\n" .
            "define('WP_DEFINES_IMPORTED', true); \r\n" .
            "define('MULTISITE', true); \r\n".
            "define('SUBDOMAIN_INSTALL', true); \r\n".
            "define('DOMAIN_CURRENT_SITE', '". get_clean_basedomain() . "'); \r\n".
            "define('PATH_CURRENT_SITE', '". parse_url(  trailingslashit( get_option( 'home' ) ), PHP_URL_PATH ) . "'); \r\n".
            "define('SITE_ID_CURRENT_SITE', 1); \r\n".
            "define('BLOG_ID_CURRENT_SITE', 1); \r\n";

        $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
        file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }
}
  1. これをmu-pluginsフォルダーに配置します。
  2. フレッシュWPインストール
  3. 管理パネルに移動
  4. ツールにクリック
  5. クリックしてネットワーク設定
  6. セットアップを実行する
  7. ???
  8. 利益!!!

ここに画像の説明を入力してください


私はすでにそれをチェックしました。ポイントは先にwp-load.php引き込むwp-config.phpので、WP_INSTALLING_NETWORK定義されません。ただし、使用できる場合でも、ネットワークのセットアップ中にのみ使用できます。インストールの実行後に定数を残すにはどうすればよいですか?
カイザー2013

いいえ。関数を使用して1回実行し、定義をwp-config.phpファイルに1回書き込む必要があります。あなたはそれをregister_activation_hookのように考えることができます
–ÜnsalKorkmaz 2013

index.phppulls ./wp-blog-header.php)、それからプルwp-load.phpし、そこからwp-config.php呼び出されます。概要はここで見つけることができますadmin.php自身の前に呼び出されるsetup.phpnetwork.php(と呼び出すwp-load.php設定がすでに実行されているので、最初に自分自身を)。
カイザー2013

そして、それがすでにであるかどうかをチェックせずにWP_INSTALLING_NETWORK取得define()するようにdefined()、私はFatal Errorそこに作成します。私の間違いを証明して、テストしてください。:)
カイザー2013

2
いいえ、私は違います。私は、上記の話題から外れた漫画をトローリングまたは単に失礼なものとして扱うことができるという事実さえ無視しています。解決策を探しています。限目。ただし、書き込み可能なwp-config.phpファイルを使用すると、セキュリティ上のリスクがあります。あなたがそこにすべての重要な詳細を得たと考えてください。これが機能する方法はないことを示しました(書き込み可能な構成ファイルがない場合)。私が探しているのは、チェックしてスイッチとして使用できるインジケーター(システムの速度を低下させない)です。それ以外はすべて機能しません。
カイザー2013

-1

設定が毎回同じである場合(サブドメインのインストール)、最初のステップでチャンク全体を貼り付けることができる場合があります。

define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); define( 'DOMAIN_CURRENT_SITE', $_SERVER[ 'HTTP_HOST' ] ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', true ); define( 'BLOG_ID_CURRENT_SITE', true );


あなたが質問で見ることができるように、私は必要な定数をかなり知っています。私が探しているのは、セットアップがステップ1をすでに通過した場合の信頼できる指標です。下の強調表示された実際の質問をご覧ください。頑張ってくれてありがとう。
カイザー

私の答えは、インジケーターが必要かどうかに挑戦することでしたが、サーバー変数に依存してDOMAIN_CURRENT_SITE、内部設定の完了後にWordPressが提供する正しい定数を提供しました。
Geoff、2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.