विषय में प्लगेबल फ़ंक्शन को कैसे ओवरराइड करें?


10

आपके द्वारा सामना किए गए सभी दस्तावेज़ आपके प्लग इन के माध्यम से प्लग करने योग्य फ़ंक्शन को ओवरराइड करने पर चर्चा करते हैं।

यदि आप इसके बजाय विषय विकास कर रहे हैं तो क्या होगा?

मेरे फंक्शन्स.php को एक और फाइल की आवश्यकता होती है get_user_by(), जो फंक्शन को ओवरराइड करती है, जिसमें परिभाषित होती है pluggable.php

अगर मैं if( function_exists() )कॉल को छोड़ देता हूं तो मुझे "रिडक्लेयर नहीं ..." त्रुटि मिल सकती है।

यदि मैं if( function exists() )कॉल शामिल करता हूं , तो मुझे कोई त्रुटि नहीं मिलती है, लेकिन निश्चित रूप से मेरे फ़ंक्शन को अनदेखा किया जाता है, क्योंकि प्लग करने योग्य संस्करण मौजूद है।

वर्डप्रेस स्टार्टअप ऑर्डर पर डोमिनिक की भयानक पोस्ट के आधार पर , यह स्पष्ट है कि आपके विषय से पहले और बाद pluggable.phpमें लोड किया गया है, ताकि त्रुटि की व्याख्या हो।functions.php

तो सवाल यह है कि आप एक विषय के भीतर से उस अच्छी प्लगेबल आर्किटेक्चर का लाभ कैसे उठा सकते हैं, जो कि प्लगइन्स लिखने का सहारा लिए बिना, जिसे फिर से बंडल किया जाना चाहिए या थीम के साथ स्थापित किया जाना चाहिए?

आगे के नोट्स : तो ऐसा प्रतीत होता है कि तर्क यह है कि थीम को वह करने की कोशिश नहीं करनी चाहिए जो प्लगइन्स करते हैं। लेकिन यह तर्क चार साल से अधिक पुराना है (4-अंकीय टीआरसी संख्या के अनुसार)। मैं कुछ भारी हिटरों से सुनना पसंद करूंगा चाहे यह दर्शन अभी भी लागू हो, आज के विषय विकास परिदृश्य के जटिल टोपोलॉजी को देखते हुए। मुझे विश्वास है कि हम तब से विकसित हुए हैं।

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

यह मेरे लिए प्लगइन्स के उपयोग के मामले की तरह नहीं है। विषय स्थापित है, शायद ट्वेंटी इलेवन का एक बच्चा विषय, शायद एक स्टैंडअलोन, इसके फ़ंक्शन। एफएपी में एक नाव लोड शामिल है, प्रत्येक प्रश्न में सीएमएस के एक अलग पहलू को संभालता है। फिर थीम टेम्प्लेट फ़ाइलें कस्टम 'टेम्प्लेट टैग' का उपयोग करती हैं जिन्हें शामिल किया गया है। मैं कुछ प्लगइन या अन्य सक्रिय होने पर निर्भरता के साथ विषय फ़ाइलें नहीं करना चाहता, आदि। यह सिर्फ सिस्टम में जटिलता का निर्माण करने के लिए समझ में नहीं आता है। ज़रूर, मैं इसे प्लगइन्स के उपयोग करने वाले फ़ोल्डर में रख सकता हूं, लेकिन यह अभी भी एक हैक की तरह महसूस करता है - अभी, इस परियोजना के लिए किए गए अनुकूलन के साथ जो कुछ करना है वह इसमें निहित है wp-content/themes/my-theme/। मैं कुछ प्लगइन्स फ़ोल्डर में सामान की खोज करने पर भी विचार नहीं करना चाहता।

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



सफेद करने के लिए, टिकट को फिर से बंद कर दिया गया था, क्यों की एक अच्छी व्याख्या के साथ।
टॉम ऑर्नर

जवाबों:


10

यदि आप एकल ग्राहक के लिए इसका निर्माण कर रहे हैं, तो आपको इसका लाभ उठाना चाहिए mu-plugins

वर्डप्रेस में बहुत सारी चीजें हैं जो आप नहीं कर सकते functions.php। प्लग करने योग्य कार्य उनमें से एक है, लेकिन इससे भी अधिक स्पष्ट, हुक की एक संख्या (दोनों क्रियाएं और फिल्टर) पहले आग functions.php। कुछ मामलों में, ये हुक नियमित प्लगइन्स से पहले भी आग लगाते हैं, जिसके बाद आपको उपयोग करने mu-pluginsया नेटवर्क-सक्रिय प्लगइन की आवश्यकता होती है। अभी भी अन्य मामलों में, यहां तक ​​कि एक म्यू-प्लगइन भी बहुत देर हो चुकी है। शायद आपको इसमें कुछ चाहिए sunrise.php। या यहां तक ​​कि कुछ (एक स्थिर या अन्यथा) में wp-config.php

मैं प्लग करने योग्य फ़ंक्शंस में कुछ हुक जोड़ूंगा, इससे उन्हें ओवरराइड करना आसान हो जाएगा। हमारे पास फिर से एक और प्लगेबल फ़ंक्शन होने की संभावना नहीं है - वे हुक से पहले के हैं और मैंने लगभग कभी ऐसी स्थिति नहीं देखी है जहां एक अच्छे पुराने जमाने (नए-नए?) हुक पर उन्हें फायदा हो।

मैं अब भी सहमत हूं, छह साल बाद, एंडी स्केल्टन के साथ - "एक थीम के फ़ंक्शंस फ़ाइल और एक प्लगइन के बीच कई अंतर हैं। चलो इसे इस तरह से रखें।"

यह सब एक तरफ, इस तरह का बदलाव कभी नहीं हो सकता है। यह बहुत सारी चीजों को तोड़ देगा। अगणित थीम उस फ़ंक्शन को कॉल करते हैं जिसके शरीर functions.phpमें एक घातक त्रुटि होती है यदि pluggable.phpपहले से लोड नहीं किया गया था - जैसे current_user_can(), या wp_create_nonce()। वे सब विफल हो जाएगा। और यह प्लगइन्स को भी तोड़ देगा, जो आम तौर पर इन फ़ंक्शन को कॉल करना शुरू कर सकता है plugins_loaded। (बस pluggable.phpनीचे की ओर बढ़ें wp-settings.phpऔर मैं शर्त लगाता हूं कि कोर का आधा हिस्सा टूट जाएगा - या बहुत कम से कम, कस्टमाइज़र होगा।)

अंत में, अपरिहार्य विचार है कि एक थीम में एक अलग फ़ाइल शामिल हो सकती है जैसे pluggable.phpकि हम प्लगइन्स को जितनी जल्दी लोड कर सकते हैं, और इसलिए प्लग करने योग्य कार्यों को ओवरराइड कर सकते हैं। इसके अलावा यह एक बुरा विचार है (इस टिप्पणी के पहले चार पैराग्राफ देखें), यह अभी भी संगत नहीं होगा, क्योंकि setup_themeहुक तक , कोई भी ओवरराइड कर सकता है कि किस विषय को स्टाइलशीट और टेम्पलेट मानों को फ़िल्टर करके लोड किया जाना है।

दुर्भाग्य से, यह सिर्फ वर्डप्रेस आर्किटेक्चर होने के कारण दी जाने योग्य नहीं है। अच्छी बात यह है कि इसे करने के अनगिनत (बेहतर) तरीके हैं।

(मूलतः यहां पोस्ट: http://core.trac.wordpress.org/ticket/2479#comment:5 )


यहां अपना उत्तर क्रॉस-पोस्ट करने के लिए समय निकालकर आप की सराहना करें। अब जब आपने इसे समझा दिया है, तो मैं चीजों को आपके तरीके से देखता हूं। समझ में आता है। धन्यवाद!
टॉम ऑगर

5

एक बार बंद परियोजना के संदर्भ में, कोड का उपयोग करना छोड़ देना बिल्कुल उचित है mu-plugins। यदि "यह सब एक ही बार में हो रहा है" तो यह एक चिंता का विषय है, बस mu-pluginsड्रॉप-इन के लिए विषय dir में एक सिमलिंक बनाएं , इसलिए यह थीम निर्देशिका को खोजते समय दिखाई देगा।


मार्क, सिम्बल के बारे में सुझाव के लिए धन्यवाद। यद्यपि यह प्रवास के साथ मदद नहीं करता है, यह विकसित होने पर बहुत सुविधाजनक हो सकता है।
टॉम ऑर्नर

0

मैं इसे पूरा करने के तरीके के बारे में नहीं सोच सकता, बहुत जल्दी लोडिंग अनुक्रम में।

निकटतम सेंस सॉल्यूशन में कस्टम जोड़ना शामिल होगा wp-config.php(कोड या उपयोगकर्ता से पूछकर), लेकिन उस बंडलिंग प्लग इन की तुलना करना शायद अधिक समझ में आएगा।


हां, मुझे इसके बारे में बताओ।
टॉम ऑगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.