नोट: यह उत्तर केवल यहाँ @scribu और @kaiser के बीच चर्चा को आसान बनाने के लिए है। मोड: कृपया हटाएं नहीं। उपयोगकर्ता / पाठक: कृपया वोट न करें। यदि आप चर्चा का पालन करना चाहते हैं, तो संशोधन / संपादन लॉग पर एक नज़र डालें। यदि आप चर्चा में शामिल होना चाहते हैं, तो उत्तर को संपादित करें। यदि चर्चा का परिणाम है, तो इसे इस तरह चिह्नित किया जाएगा। धन्यवाद।
परिदृश्य
वहाँ भी अलग अलग परिदृश्य है कि वजन अलग हैं, जहाँ आप एक प्लगइन निर्भरता हो सकता है। (उदाहरण केवल काल्पनिक हैं)। शब्द (मूल) प्लगिन "को मूल विषय से" थीम "के साथ बदला जा सकता है।
- (हार्ड) एक बच्चा प्लगइन जो केवल कार्यक्षमता का विस्तार करता है या किसी मौजूदा प्लगइन के प्रदर्शन (और समान) को बदल देता है और इसलिए माता-पिता के बिना मौजूद नहीं हो सकता है। उदाहरण: बड्डीप्रेस »बड्डीप्रेस-फंकी कॉमिशनडिसप्ले
- (सामान्य) एक प्लगइन जो एक चाइल्ड प्लगइन सक्रिय होने पर कार्यक्षमता बढ़ाता है। उदाहरण: jQueryAttachmentCarousel »jQuerySlideDeck
- (सॉफ्ट) एक प्लगइन जो सिर्फ एक फीचर जोड़ता है। उदाहरण: DisneyWonderlandTheme »MickeysSocialLinks
निम्नलिखित में मैं स्केच करने की कोशिश करता हूं जब आप "अन्य" प्लगइन को अपडेट करते हैं और चेक अब काम नहीं करता है।
- विज्ञापन 1) BuddyPress सक्रिय किए बिना प्लगइन मौजूद नहीं हो सकता है »सामग्री पूरी तरह से टूट गई है।
- विज्ञापन 2) प्लगइन हिंडोला »स्लाइडडेक» वायर्ड प्रदर्शित करता है (मुझे लगता है कि शैली स्लाइडडेक में संशोधित कर रहे हैं) से स्विच करने का विकल्प नहीं दे सकता है।
- विज्ञापन 3) मिकीसोशलियालिंक गायब हो गए।
चेक
अगर आप एक प्लगइन सक्रिय है जानना चाहते हैं, तो imho तीन संभावनाओं के खिलाफ जांच कर सकते हैं:
- A. क्या फ़ोल्डर मौजूद है?
- B. मुख्य फ़ाइल - विकल्प
'active_plugins'
- मौजूद है?
- C. क्या कोई विशेष कार्य मौजूद है?
अगर मैं अब अपने आंतरिक लिंक चेकर प्लगिन को एक उदाहरण के रूप में लेता हूं , जो कोई सार्वजनिक एपीआई नहीं देता है और इसका मतलब है कि विस्तारित होने का मतलब नहीं है, तो मुझे कोई कारण नहीं दिखाई देगा (लेखक के रूप में) मांग पर या केवल आंतरिक नामकरण को बदलने के लिए नहीं। । इसलिए अगर कोई इस प्लगइन पर गुल्लक करने की कोशिश करेगा, तो अपडेट पर सामान केवल टूट जाएगा (कार्यक्षमता और बंडल की जकड़न के आधार पर)। वही फ़ाइल नामों के लिए जाता है। मेरे पास कोई वास्तविक कारण नहीं है (अलग से यह कि प्लगइन अद्यतन पर निष्क्रिय हो जाएगा) फ़ाइल नाम को बदलने के लिए नहीं। केवल एक चीज जो मुझे फ़ोल्डर नाम बदलने से रोकती है, वह यह है कि अपडेट जांच और अधिसूचना फ़ाइल नाम के खिलाफ चलती है - यदि यह आधिकारिक रेपो में होस्ट की गई है।
इसलिए मैं सबसे कमजोर (बदलने में आसान) से सबसे मुश्किल (बदलने के खिलाफ बहुत कुछ बोलने वाला) (माता-पिता) प्लगइन का हिस्सा कहूंगा:
समारोह »मुख्य फ़ाइल नाम» फ़ोल्डर
जब मैंने कहा कि एक फ़ंक्शन चेक का उपयोग करने की तुलना में कम नाजुक है, तो is_plugin_active()
मैंने मान लिया कि प्रश्न में फ़ंक्शन एक है जिसे प्लगइन लेखक स्पष्ट रूप से प्रोत्साहित करता है। इसका अंतिम उदाहरण wp_pagenavi()
WP-PageNavi प्लगइन द्वारा प्रस्तुत टेम्प्लेट टैग होगा ।
निर्भरता को परिभाषित करने में कठिनाई यह है कि प्लगइन्स को विशिष्ट रूप से पहचानने का कोई मानक तरीका नहीं है जिसमें फ़ाइल नाम शामिल नहीं है।
विषय पर अधिक विचार:
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
मुझे लगता है कि हम अब तक इसे तीन बिंदुओं में जोड़ सकते हैं:
- हमने थोड़े अलग विषयों पर बात की है
- हम इस बात से सहमत हैं कि कोई बुलेटप्रूफ तरीका नहीं है जो मुझे लगा कि विषय क्या होगा
- प्रश्न की अपनी समझ से, आपने जाने के लिए वैध तरीके की पेशकश की
(अब तक) सबसे चतुर तरीका मैं सोच सकता हूं, कि मैंने पहले ही कुछ (बहुत कम) प्लगइन्स में देखा है:
// inside the plugin file:
add_action( 'plugin_custom_hook', 'plugin_trigger' );
// inside some template:
do_action( 'plugin_custom_hook' );
इसके बारे में बहुत अधिक विचार किए बिना, लेकिन मुझे लगता है कि आप अपने नोटिस को 'सभी' फ़िल्टर पर एक चेक में हुक कर सकते हैं और वर्तमान फ़िल्टर के अंदर जांच सकते हैं कि क्या यह shutdown
हुक पर होने पर ट्रिगर किया गया था ...?
हुक का उपयोग करना 'सामान्य' और 'कमजोर' निर्भरता के लिए अच्छा काम करेगा। एकमात्र दोष यह है कि आपको अभी भी उपयोग करने की आवश्यकता होगी function_exists()
या is_plugin_active()
यदि आप रोकना चाहते हैं तो निर्भरता पूरी नहीं होती है। इसके लिए 'ऑल' फिल्टर का इस्तेमाल करना बहुत महंगा आईएमओ होगा।
@scibu यह "आपके" विषय पर लक्षित था। (मैं पहले से ही मेरे बारे में बात करना छोड़ दिया)। :)
इसलिए मूल रूप से, अगर आपको एक निर्भरता की आवश्यकता है - और आपके पास एक अच्छा लेखक है - तो वह टेम्पलेट टैग के बदले प्रतिस्थापन के रूप में / हुक प्रदान कर सकता है। क्योंकि प्लगइन केवल इसमें हुक करेगा यदि हुक मौजूद होगा, या बस कुछ भी नहीं होगा। और दूसरी तरफ आपको कोई त्रुटि नहीं होगी, जब प्लगइन्स मौजूद न हों।
यहां कठिन भाग (या क्यू से अधिक) है: उपयोगकर्ता को निर्भरता के बारे में सूचित करने के लिए एक व्यवस्थापक नोटिस लिखने के लिए "आपको" DisneyWonderLinks «इंस्टॉल करने की आवश्यकता है", आप देख सकते हैं array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
। मुझे यकीन नहीं है कि अगर यह काम करेगा, लेकिन यह सरणी दोनों (सार्वजनिक / व्यवस्थापक) पक्षों पर सुलभ होनी चाहिए।
वह काम नहीं करेगा। सिर्फ इसलिए कि हुक में कॉलबैक पंजीकृत है इसका मतलब यह नहीं है कि हुक अपेक्षित होने पर चालू हो जाएगा। केवल एक चीज जो काम की तरह होगी, वह 'शटडाउन' हुक का उपयोग कर रही है, जिसका आपने पहले उल्लेख किया था:
add_action( 'shutdown', function() {
if ( !did_action( 'template_tag_like_hook' ) )
echo 'Problem.';
} );
बेशक, यह बहुत ही निचले भाग पर, </html>
टैग के बाद , फ्रंट-एंड पर (क्योंकि वह है जहाँ टेम्पलेट टैग सामान्य रूप से उपयोग किया जाता है) में मुद्रित किया जाएगा , जो बहुत अधिक उपयोग का नहीं है।
आप संदेश को wp_options में संग्रहीत करने का प्रयास कर सकते हैं और फिर इसे व्यवस्थापक क्षेत्र में प्रदर्शित कर सकते हैं, लेकिन इससे कीड़े की पूरी नई इच्छा खुल जाएगी: अमान्यकरण, कैशिंग प्लगइन्स आदि।
function_exists
, जिसके साथ आप सवाल करते हैं , तो एक सामान्य उपयोगकर्ता को बस संदेश मिलेगा, कि उसने उस प्लगइन को स्थापित नहीं किया है जिस पर एक और प्लगइन निर्भर करता है। समस्या यह है कि उपयोगकर्ता वास्तव में, है जाएगा प्लग-इन इंस्टॉल और फिर बस कारण है कि यह आश्चर्य काम doens't । ओह, और मैं इसके लिए आपको नीचा दिखाने वाला नहीं हूं ।