web-dev-qa-db-ja.com

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

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

define( 'WP_ALLOW_MULTISITE', true );

その後、Tools > Network Setupに行き、ネットワーク名やスーパー管理者のメールアドレスなどの詳細を入力し、最後にボタンを押してセットアップを実行します。

ポップアップが表示される次のステップは、実際には2つのステップです。

  1. wp-config.phpファイルに additional 定数を追加します。

    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にアクセスして編集する必要はありません。

私の頭に浮かんだ 1st の事は{$wpdb->prefix}sitemetaテーブルのためにDBをチェックすることでした、しかし私は各サイト負荷で追加のクエリをしたくないです。私が考えていた 2nd は、blogs.dirが既に存在するかどうかをチェックすることでしたが、そうではありません。

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

10
kaiser

私はこれをテストしていませんが、もしあなたがそのような解決策を見つける必要があるなら、私はおそらく上記のif ( SOME_CHECK_IF_STEP-1_WAS_PASSED )条件にスクリプトを追加することによって以下の方法でそれをやろうとするでしょう:

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

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

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

これは努力の価値があることを確認してください、しかし...;)

1
Alain Schlesser