आगंतुकों को एक अस्थायी रखरखाव पृष्ठ पर पुनर्निर्देशित करें


13

अपने आगंतुकों को रखरखाव के दौरान मेरी साइट के टूटे हुए संस्करण को देखने से रोकने के लिए, और उन्हें अपडेट पर सिर देने के लिए, मैं उन्हें अस्थायी रखरखाव पृष्ठ पर स्वचालित रूप से पुनर्निर्देशित करना चाहूंगा। मैं एक पोर्टेबल समाधान की तलाश कर रहा हूं जिसका उपयोग किसी भी साइट पर बिना हार्डकॉन्ग यूआरएल के किया जा सकता है।

व्यवस्थापकों (या पसंद के अन्य उपयोगकर्ता स्तर) में लॉग इन करके बैक-एंड और फ्रंट-एंड तक पूरी पहुँच प्राप्त करनी चाहिए। वहाँ बहुत सारे प्लगइन्स हैं जो इस कार्यक्षमता की पेशकश करते हैं, लेकिन मैं एक कोड-केवल समाधान की तलाश कर रहा हूं।


एक प्लगइन से कोड कॉपी?
मार्क कप्लून

पहिया को क्यों मजबूत करें? एक प्लगइन का उपयोग करें। विशेष रूप से, प्रतिबंधित साइट एक्सेस।
वैंकेडर

2
मैं अपने कस्टम थीम के लिए कम से कम प्लगइन्स का उपयोग करने की कोशिश करता हूं। "कम अधिक है";)
न्यूयूजर

जवाबों:


24

रखरखाव मोड को संभालने के लिए वर्डप्रेस में एक एम्बेडेड सुविधा है।

जब आप WP डैशबोर्ड से एक प्लगइन, या वर्डप्रेस कोर को अपग्रेड करते हैं, तो वर्डप्रेस रखरखाव मोड में प्रवेश करता है: यह maintenance.phpसामग्री फ़ोल्डर (आमतौर पर /wp-content) में स्थित एक फ़ाइल को लोड करने की कोशिश करता है , और यदि वह फ़ाइल नहीं है, तो WP एक डिफ़ॉल्ट संदेश दिखाता है।

मेरा सुझाव है कि आप उस फ़ाइल का उपयोग करें, इस तरह से आप अपने मैन्युअल रूप से ट्रिगर रखरखाव और वर्डप्रेस-हैंडल रखरखाव के लिए संगत होंगे।

कैसे

  1. सबसे पहले maintenance.phpफाइल बनाएं और वहां मनचाहा कंटेंट डालें। स्टाइल के लिए मेरा सुझाव है कि आप <style>टैग का उपयोग करके फ़ाइल में सीएसएस डालें; आम तौर पर यह अच्छी सलाह नहीं है, लेकिन इस मामले में यह आपको वर्डप्रेस-हैंडल रखरखाव मोड के लिए फ़ाइल का उपयोग करने की क्षमता देता है, जब कोई थीम लोड नहीं होती है (और थीम अपग्रेड हो सकती है, इसलिए विश्वसनीय नहीं है)।

  2. सामग्री फ़ोल्डर (आमतौर पर /wp-content) में बनाई गई फ़ाइल को सहेजें ।

  3. आपके functions.phpपुट में:

    add_action( 'wp_loaded', function() {
        global $pagenow;
        if(
            defined( 'IN_MAINTENANCE' )
            && IN_MAINTENANCE
            && $pagenow !== 'wp-login.php'
            && ! is_user_logged_in()
        ) {
            header( 'HTTP/1.1 Service Unavailable', true, 503 );
            header( 'Content-Type: text/html; charset=utf-8' );
            header( 'Retry-After: 3600' );
            if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
                require_once( WP_CONTENT_DIR . '/maintenance.php' );
            }
            die();
        }
    });
    

    यह कोड एक स्थिर (अगला बिंदु देखें) की जांच करेगा और यदि उपयोगकर्ता लॉग इन नहीं है, तो बिंदु # 1 पर बनाई गई फ़ाइल को लोड करें और बाहर निकलें।

    यदि आप केवल विशिष्ट क्षमताओं वाले उपयोगकर्ताओं को अनुमति देना चाहते हैं, तो current_user_can('capability_to_allow')इसके बजाय उपयोग करें is_user_logged_in()। अधिक जानकारी के लिए कोडेक्स देखें ।

    हो सकता है कि आप maintenance.phpलॉगिन पृष्ठ के लिंक में जोड़ सकते हैं ; इस तरह से एक गैर-लॉग्ड उपयोगकर्ता बिना एड्रेस बार में लॉगिन URL को मैन्युअल रूप से दर्ज किए बिना क्लिक कर सकता है।

    यदि आप तृतीय पक्ष द्वारा विकसित थीम का उपयोग कर रहे हैं, तो बच्चे के विषय का उपयोग करें ; इस तरह आप अपने परिवर्तनों को खोए बिना थीम को सुरक्षित रूप से अपडेट कर पाएंगे।

  4. जब आप रखरखाव मोड को सक्षम करना चाहते हैं, तो अपने को खोलें wp_config.phpऔर वहां डालें:

    define('IN_MAINTENANCE', true);

    उसके बाद, जब आप अपनी साइट को फिर से सार्वजनिक करने के लिए तैयार होते हैं, तो बस उस लाइन को हटा दें या आसान री-इनेबल trueकरने के falseलिए बदल दें ।


यह एक बहुत ही विस्तृत उत्तर है और यथासंभव कम प्रयास के साथ मेरी समस्या को हल करने का एक शानदार तरीका है! मैं इसे बाद में आजमाऊंगा और यदि यह काम करता है तो उत्तर को स्वीकार करूंगा। बहुत बहुत धन्यवाद जीएम!
न्यूयूसर

हाय जीएम - मैं "wp-content" निर्देशिका नाम के एक कस्टम का उपयोग करता हूं, लेकिन मुझे यह पता नहीं है कि इसे बनाने के लिए WP_CONTENT_DIR ..... को कैसे बदलना है? सर्वश्रेष्ठ
न्यूउसर

पुराना धागा, मुझे पता है .. लेकिन अगर किसी को उस उत्तर की आवश्यकता है, तो यह उतना आसान है जितना define('WP_CONTENT_DIR','/url/to/define/');आपकी wp-config.phpफ़ाइल में जोड़ना ।
जीएमओ

@gmazzap, यह आश्चर्यजनक है। क्या इसका मतलब यह है कि यदि और केवल यदि आप पहले से ही लॉग इन हैं (एक प्रशासक के रूप में कहें), तो आप अभी भी एक्सेस और एडमिन कंसोल पर / में संशोधन कर पाएंगे?
परांज

@ अपरान्ह हां, सही।
gmazzap

2

पिछला उत्तर पूर्ण और अच्छी तरह से लिखा गया है। किसी भी तरह अगर आप मेरे जैसे हैं और आप एक जगह सब कुछ करना चाहते हैं तो आप function.phpफ़ाइल में निम्न पंक्तियाँ छोड़ सकते हैं और maintenance.phpअपनी थीम डायरेक्टरी में एक फ़ाइल बना सकते हैं।

यह विशेष रूप से उपयोगी है अगर आपका गिट रिपॉजिटरी केवल थीम डायरेक्टरी की ओर इशारा करता है।

add_action( 'wp_loaded', function() 
{
    global $pagenow;

    // - - - - - - - - - - - - - - - - - - - - - - 
    // Turn on/off you Maintenance Mode (true/false)
    define('IN_MAINTENANCE', true);
    // - - - - - - - - - - - - - - - - - - - - - - 

    if(
        defined( 'IN_MAINTENANCE' )
        && IN_MAINTENANCE
        && $pagenow !== 'wp-login.php'
        && ! is_user_logged_in()
    ) {
        header('HTTP/1.1 503 Service Temporarily Unavailable');
        header( 'Content-Type: text/html; charset=utf-8' );
        if ( file_exists( get_template_directory() . '/maintenance.php' ) ) {
            require_once( get_template_directory() . '/maintenance.php' );
        }
        die();
    }
});

टिप्पणियाँ

मैंने हेडर को बदल दिया header('HTTP/1.1 503 Service Temporarily Unavailable');क्योंकि ऊपर वाले ने मेरे लिए काम नहीं किया।


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

@ टिमालोन, मैं सहमत हूं। अंत में यह एक वर्कअराउंड है जो कम समय की अवधि में अच्छी तरह से काम करेगा, जबकि आप (डेवलपर) सभी अपडेट करते हैं।
a.bbieri
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.