डायनामिक रूप से wp-config.php में अतिरिक्त नेटवर्क स्थिरांक जोड़ें


10

एक नए नेटवर्क इंस्टॉल के साथ शुरू होने पर, पहला कदम एक साइट स्थापित होता है जिसमें wp-config.phpफ़ाइल में एक अतिरिक्त लाइन होती है :

define( 'WP_ALLOW_MULTISITE', true );

उसके बाद हमें जाना है Tools > Network Setup, कुछ विवरण जैसे नेटवर्क का नाम और सुपर एडमिन ईमेल दर्ज करें और अंत में सेटअप चलाने के लिए बटन दबाएं।

अगला चरण पॉप अप वास्तव में दो चरण है:

  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हर बार जाकर इसे फिर से संपादित करने की जरूरत नहीं है ।

1 बात यह है कि मेरे दिमाग में आया के लिए डीबी जाँच करने के लिए था {$wpdb->prefix}sitemetaमेज, लेकिन मैं प्रत्येक साइट लोड पर एक अतिरिक्त क्वेरी करने के लिए नहीं करना चाहती। 2 बात मैं के बारे में सोचा है, तो जाँच करने के लिए था blogs.dirपहले से मौजूद है, लेकिन यह ऐसा नहीं है।

प्रश्न: मैं कैसे संकेत कर सकता हूं कि मैंने पहले से ही नेटवर्क सेटअप का पहला चरण पारित कर दिया है जिसमें भारी ओवरहेड नहीं है या प्रदर्शन में कमी आई है।


2
आपको सब कुछ स्वचालित करने का प्रयास नहीं करना चाहिए: i.imgur.com/OoF9Md7.png
Korkmaz

1
यह वास्तव में अविश्वसनीय है प्रक्रिया अभी भी एक ही है, जबकि अधिक से अधिक WP स्थापना
मल्टीसाइट

@ MynsalKorkmaz यदि आपने मेरा कॉन्फ़िगरेशन सेटअप देखा है, तो आप समझेंगे कि यह केवल एक और कदम आगे है। अगली बात: ग्रन्ट wp-configजनरेटर
केसर

मुझे समझ नहीं आ रहा है कि आपको यह जांचने की आवश्यकता होगी कि क्या प्रत्येक पृष्ठ लोड के लिए कोई शर्त मौजूद है और फिर स्थिरांक परिभाषित करें। आप एक मल्टीसाइट सेट-अप चलाने के साथ हैं या आप नहीं हैं। यदि आप WordPress सेट-अप को स्वचालित करने के बारे में बात कर रहे हैं तो आप कुछ इस तरह देख सकते हैं जैसे YeoPress github.com/wesleytodd/YeoPress
kingkool68

@ Kingkool68 आसान। क्योंकि मैं हर बार जब मैं एक नेटवर्क स्थापित करता हूं, तो उन स्थिरांक को अनसुना / टिप्पणी नहीं करना चाहता। यह ओवरहेड नहीं है और बस कदम अनावश्यक है। और नहीं, मैं WP सेटअप को स्वचालित करने के बारे में बात नहीं कर रहा हूं। Btw: येओमान कार्यों के लिए ग्रंट (जिसका मैंने ऊपर उल्लेख किया है) का उपयोग करता है।
kaiser

जवाबों:


1

मैंने इसका परीक्षण नहीं किया है, लेकिन अगर आपको इस तरह का समाधान खोजने की आवश्यकता है, तो मैं संभवतः निम्नलिखित तरीके से स्क्रिप्ट जोड़ने की कोशिश करूँगा जिस if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )शर्त को आपने ऊपर वर्णित किया है, वह है:

  • {$wpdb->prefix}sitemetaतालिका के लिए DB की जाँच करें ;
  • अगर यह मौजूद नहीं है -> झूठी वापसी;
  • यदि यह मौजूद है -> फिर से लिखने के लिए एक WP क्रोन नौकरी जोड़ें wp-config.php-> सही लौटें।

WP क्रॉन जॉब wp-config.phpचेक को पूरी तरह से खत्म करने के लिए फिर से लिखेगा ।

इस तरह, आपके पास केवल एक अतिरिक्त DB अनुरोध है जब तक कि नेटवर्क सेट न हो जाए और क्रोन जॉब ने अपना जादू चला दिया।

ध्यान दें कि यह प्रयास के लायक है, हालांकि ...;)


BTW, स्क्रिप्ट सीधे फ़ाइल को बदल सकती हैwp-config.php , लेकिन मुझे लगता है कि यह उस बिंदु पर बंद हो जाएगा ...
Alain Schlesser

यह क्रॉन जॉब आइडिया मजेदार है :) इसके लिए धन्यवाद। Btw, आप अपना जवाब संपादित कर सकते हैं ।
केसर

-1

निरीक्षण wp-admin/network.phpऔर wp-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. इसे म्यू-प्लग फ़ोल्डर में रखें।
  2. ताजा wp स्थापित
  3. व्यवस्थापक पैनल पर जाएं
  4. टूल्स पर क्लिक करें
  5. नेटवर्क सेटअप पर क्लिक करें
  6. सेटअप चलाएँ
  7. ???
  8. फायदा!!!

यहाँ छवि विवरण दर्ज करें


मैंने पहले ही जाँच कर ली है। बिंदु यह है कि पहले wp-load.phpखींचता है wp-config.php, इसलिए WP_INSTALLING_NETWORKपरिभाषित नहीं किया जाएगा। लेकिन भले ही यह उपलब्ध होगा, यह केवल नेटवर्क सेटअप के दौरान उपलब्ध है। स्थापना के चलने के बाद मैं स्थिरांक छोड़ने के लिए क्या करूंगा ?
kaiser

नहीं .. आपको एक बार निष्पादित करने के लिए एक फ़ंक्शन का उपयोग करना चाहिए और एक बार wp-config.php फ़ाइल में अपने परिभाषित लिखना चाहिए। आप इसे सोच सकते हैं जैसे कि register_activation_hook
Knsal Korkmaz

index.phpखींचता है ./wp-blog-header.php), जो तब खींचता है wp-load.phpऔर वहां wp-config.phpसे कहा जाता है। एक सिंहावलोकन यहां पाया जा सकताadmin.phpखुद से पहले कहा जाता हो जाता है setup.phpऔर network.php(और कॉल wp-load.phpशुरुआत में ही), इसलिए config पहले से ही चल रहा है।
kaiser

और जैसा कि पहले से ही जाँच के बिना WP_INSTALLING_NETWORKहो जाता define()है defined(), मैं Fatal Errorवहाँ बनाऊंगा। कृपया मुझे गलत सबूत दें और इसे एक परीक्षा दें। :)
kaiser

2
नहीं Noसनल, मैं नहीं। मैं इस तथ्य को भी अनदेखा कर रहा हूं कि मैं ऑफ-टॉपिक कॉमिक स्ट्रिप को ट्रोलिंग या सिर्फ अशिष्टता के रूप में ले सकता हूं। मैं एक उपाय खोज रहा हूं। अवधि। लेकिन एक लिखने योग्य wp-config.phpफ़ाइल का होना सुरक्षा जोखिम है। विचार करें कि आपको वहां सभी महत्वपूर्ण विवरण मिले हैं। मैंने आपको दिखाया कि इसका कोई तरीका नहीं है कि यह काम करेगा (बिना किसी राइटिंग कॉन्फिगर फाइल के)। मैं जो खोज रहा हूं वह एक संकेतक है (जो सिस्टम को धीमा नहीं करता है) जिसे मैं स्विच के रूप में खिलाफ जांच और उपयोग कर सकता हूं। बाकी सब कुछ नहीं चलेगा।
kaiser

-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कि आंतरिक सेटअप पूरा करने के बाद वर्डप्रेस आपको देता है।
ज्योफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.