Wp-config.php dosyasına dinamik olarak ek Ağ sabitleri ekleme


10

Yeni bir Ağ kurulumuyla başlarken ilk adım, wp-config.phpdosyada bir satır daha içeren tek bir site kurulumudur :

define( 'WP_ALLOW_MULTISITE', true );

Bundan sonra, Tools > Network Setupağ adı ve süper yönetici e-postası gibi bazı ayrıntıları girin ve son olarak kurulumu çalıştırmak için düğmeye basın.

Açılan bir sonraki adım aslında iki adımdır:

  1. Dosyanıza ek sabitler ekleyinwp-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. .htaccessDosyanıza bazı kurallar ekleyin .

Tek site yüklemeleri yapmadığımdan (bunun için bir neden yok), bu sabitleri dinamik olarak dosyama eklemek istiyorum 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 );
}

Bu yüzden wp-config.phpher seferinde gidip tekrar düzenlemem gerekmiyor .

1 Aklıma gelen şey için DB kontrol etmekti {$wpdb->prefix}sitemetamasaya, ama her site yüküne ilave bir sorgu yapmak istemiyoruz. 2 benim aklıma şey olmadığını kontrol etmekti blogs.dirzaten var, ama bu böyle değil.

Soru: Ağ kurulumunun ilk adımını, büyük bir ek yüke sahip olmayan veya performansı düşürecek şekilde geçtiğimi nasıl belirtebilirim?


2
Her şeyi otomatikleştirmeye çalışmamalısınız
Ünsal Korkmaz

1
giderek daha fazla WP kurulumu çok bölgeli hale gelirken süreç hala aynıdır
JMau

@ ÜnsalKorkmaz Yapılandırma kurulumumu gördüyseniz, bunun sadece bir adım daha ileri olduğunu anlayacaksınız. Sonraki şey: Grunt wp-configjeneratörü.
kaiser

Neden her sayfa yüklemesi için bir koşul olup olmadığını kontrol etmeniz ve ardından sabitleri tanımlamanız gerektiğini anlayamıyorum. Çok bölgeli bir kurulum yürütüyorsunuz veya çalışmıyorsunuz. WordPress kurulumunu otomatikleştirmekten bahsediyorsanız YeoPress gibi bir şeye bakabilirsiniz github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 Kolay. Çünkü ağ kurulumunu her kurduğumda bu sabitleri açığa çıkarmak / yorum yapmak istemiyorum. Tepegöz değil ve adım sadece gereksiz. Ve hayır, WP kurulumunu otomatikleştirmekten bahsetmiyorum. Btw: Yeoman, Grunt'u görevler için kullanıyor (yukarıda bahsettiğim).
kaiser

Yanıtlar:


1

Bunu test etmedim, ancak böyle bir çözüm bulmanız gerekiyorsa, muhtemelen if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )yukarıda açıkladığınız duruma bir komut dosyası ekleyerek aşağıdaki şekilde yapmaya çalışırsınız :

  • {$wpdb->prefix}sitemetatablo için DB kontrol edin ;
  • yoksa -> yanlış döndür;
  • varsa -> yeniden yazmak için bir WP cron işi ekleyin wp-config.php-> true değerini döndürün .

WP cron işi wp-config.php, kontrolü tamamen ortadan kaldırmak için.

Bu şekilde, ağ kurulana ve cron işi sihir yapana kadar yalnızca ek bir DB isteğiniz olur.

Bununla birlikte, bu çabaya değer olduğuna dikkat edin ...;)


BTW, senaryo olabilir değiştirmek wp-config.phpdosyayı doğrudan, ama ... o noktada kilitli olacağını varsayalım
Alain Schlesser

Bu cron iş fikri komik :) Bunun için teşekkürler. Btw, cevabınızı düzenleyebilirsiniz .
kaiser

-1

İnceleme wp-admin/network.phpve wp-admin/includes/schema.phpdosyalar. WP_INSTALLING_NETWORK kaynağına dayalı bir koşul oluşturabilirsiniz

Güncelleme:

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. bunu mu-plugins klasörüne koyun.
  2. taze wp yüklemek
  3. yönetici paneline git
  4. araçlar için tıklayın
  5. ağ kurulumuna tıklayın
  6. kurulumu çalıştır
  7. ???
  8. Kar !!!

resim açıklamasını buraya girin


Bunu zaten kontrol ettim. Asıl nokta, daha erken wp-load.phpçekilmesidir wp-config.php, bu yüzden WP_INSTALLING_NETWORKtanımlanmayacaktır. Ancak kullanılabilir olsa bile, yalnızca ağ kurulumu sırasında kullanılabilir. Kurulum tamamlandıktan sonra sabitleri bırakmak için ne yapmalıyım ?
kaiser

Hayır. Bir kez yürütmek ve tanımlarınızı bir kez wp-config.php dosyasına yazmak için bir işlev kullanmalısınız. Bunu register_activation_hook gibi düşünebilirsiniz
Ünsal Korkmaz

index.phpçeker ./wp-blog-header.php), bu daha sonra çeker wp-load.phpve orada wp-config.phpadı verilir. Genel bakışı burada bulabilirsiniz . admin.phpkendisi daha önce çağrılır setup.phpve network.php( wp-load.phpbaşlangıçta kendini çağırır ), bu yüzden config zaten çalışıyor.
kaiser

Ve WP_INSTALLING_NETWORKalır define()zaten ise kontrol etmeden defined(), bir yaratacak Fatal Errororada. Lütfen beni yanlış kanıtla ve bir test yap. :)
kaiser

2
Hayır Ünsal, değilim. Hatta yukarıdaki konu dışı çizgi romanı trolling veya sadece kaba alabileceğimi görmezden geliyorum. Bir çözüm arıyorum. Dönemi. Ancak yazılabilir bir wp-config.phpdosyaya sahip olmak bir güvenlik riskidir. Tüm önemli detayları orada bulduğunuzu düşünün. Size bunun yazılabilir bir yapılandırma dosyası olmadan çalışmasının bir yolu olmadığını gösterdim. Aradığım şey, kontrol edip anahtar olarak kullanabileceğim bir göstergedir (sistemi yavaşlatmaz). Diğer her şey çalışmaz.
kaiser

-1

Kurulumunuz her seferinde aynıysa (alt alan adı kurulumu), tüm yığını ilk adımınıza yapıştırabilirsiniz:

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 );


Soruda da görebileceğiniz gibi, gerekli sabitlerin oldukça farkındayım. Aradığım şey, kurulum adım 1'i geçtiğinde güvenilir bir göstergedir , başka bir şey. Lütfen aşağıda vurgulanan asıl soruya bakın. Zor çabalarınız için teşekkürler.
Kaiser

Cevabım, göstergeye bile ihtiyacınız olup olmadığına meydan okumaktı, ancak DOMAIN_CURRENT_SITEWordPress'in dahili kurulumu tamamladıktan sonra verdiği doğru sabiti sunmak için sunucu değişkenine güvenmekti .
Geoff
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.