थीम्स के साथ प्लगइन डेटा को एकीकृत करने के तरीके


17

मैं वर्डप्रेस प्लगइन्स विकसित करने के लिए सर्वोत्तम प्रथाओं के बारे में कुछ राय प्राप्त करना चाहूंगा जो थीम एकीकरण प्रदान करते हैं।

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

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

  • बैंड (एकल-उपसर्ग-बैंड। एफपीपी, एकल. एफपी, इंडेक्स। एफपी, शोर्ट)
  • एल्बम (एकल-उपसर्ग- album.php, single.php, index.php, शोर्ट)
  • ट्रैक्स (एकल-उपसर्ग-ट्रैक.php, single.php, index.php, शोर्ट)
  • बैंड लिस्टिंग (टेम्प्लेट-बैंड- list.php, पेज-बैंड-लिस्टिंग.php, पेज- {id} .php, page.php, index.php, शोर्ट)
  • एल्बम सूचीकरण (टेम्प्लेट-एल्बम-सूची.php, पृष्ठ-एल्बम-सूची.php, पृष्ठ- {id} .php, page.php, index.php, शोर्ट)
  • एल्बम टाइमलाइन (टेम्प्लेट-एल्बम-टाइमलाइन। एफपीपी, पेज-एल्बम-टाइमलाइन। एफपी, पेज- {आईडी} .php, पेज.php, index.php, शोर्ट)

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

फिर से, मैं उत्सुक हूं कि इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है? मुझे लगता है कि आप निम्न में से कोई भी कर सकते हैं।

शॉर्टकोड

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

टेम्पलेट फ़ाइलें

प्लगइन टेम्पलेट फाइलों के साथ भी जहाज कर सकता है। टेम्पलेट फ़ाइलों को चिह्नित किया जा सकता है और एक अच्छे डिफ़ॉल्ट दृश्य के लिए स्टाइल किया जा सकता है। आप अपने उपयोगकर्ता को थीम फ़ोल्डर में फ़ाइलों को स्थानांतरित करने के लिए निर्देश प्रदान कर सकते हैं, ताकि पोस्ट के प्रकारों को देखने पर थीम सही टेम्पलेट मिल जाए। आप यहां तक ​​जा सकते हैं कि एक इंटरफ़ेस प्रदान करने के लिए उपयोगकर्ता को एक क्लिक के साथ फ़ाइलों को स्थानांतरित करने की अनुमति दें (ध्यान दें: मैं सक्रियण पर उपयोगकर्ता के थीम फ़ोल्डर में फाइलें नहीं बनाऊंगा क्योंकि उनके विषय में फ़ाइलों को जोड़ना उनके बिना आरंभ करना बुराई है) ।

आप इन फ़ाइलों का उपयोग करने के लिए फ़िल्टर का उपयोग कर सकते हैं, उन्हें प्लगइन फ़ोल्डर से बाहर ले जाने के बिना, सब कुछ स्वयं को निहित रखते हुए। मैंने "template_include" और "{$ प्रकार} _template" फ़िल्टर इस प्रयोजन के लिए उपयोग किए हैं। वास्तव में, आप थीम फ़ोल्डर से टेम्पलेट्स का उपयोग कर सकते हैं और यदि वे मौजूद नहीं हैं, तो आप डिफ़ॉल्ट दृश्य प्रदान करने के लिए इन फ़िल्टर पर वापस गिर सकते हैं।

प्रश्न

मुझे यह जानना पसंद है कि अन्य लोग इन स्थितियों के लिए सबसे अच्छे अभ्यास क्या हैं, यदि प्रस्तुत विचार किसी भी तरह से समस्याग्रस्त हैं, और कोई भी विकल्प जो मैंने शामिल नहीं किया है।

धन्यवाद!


3
यदि केवल WPSE पर सभी प्रश्नों को इतनी अच्छी तरह से सोचा जाएगा ... :)
scribu

@scribu ... आप सिर्फ इसलिए कह रहे हैं क्योंकि मैंने आपके प्लगइन का लिंक शामिल किया है;) हालांकि, तारीफ के लिए धन्यवाद। मैं चिंतित था कि यह एक बेवकूफ सवाल होगा, लेकिन यह एक है जो मुझे थोड़ी देर के लिए परेशान कर रहा है।
टॉलमेनज़

मुझसे एक और +1। "क्यों" के लिए, @scribu टिप्पणी पढ़ें।
kaiser

@kaiser और scribu ... मुझे आशा है कि आप दोनों इस विषय पर अपने विचार देंगे। मुझे यह सुनना अच्छा लगेगा कि आपको क्या कहना है।
टॉलमेनज़

@tollmanz पहले ही हो चुका है। लेकिन इस तरह के एक गहन क्यू को थोड़ा विचार और समय की आवश्यकता होती है।
kaiser

जवाबों:


4

मैं आपके द्वारा पूछे गए हर एक प्रश्न का उत्तर नहीं दे सकता, क्योंकि पढ़ने में क्यू अब तक पर्याप्त समय लगता था;), लेकिन मैं आपको मुक्त, खुले स्रोत प्लगइन्स विकसित करने के साथ अपने व्यक्तिगत अनुभव के बारे में कुछ जानकारी देने की कोशिश करता हूं।

1। कभी भी ज्यादा मत करो। सुविधाएँ हर प्लगइन की मौत हैं। पहले एक मूल संस्करण बनाएँ और अपने उपयोगकर्ताओं की प्रतिक्रिया का परीक्षण करें। यदि आपके प्लगइन पर बहुत अधिक ध्यान दिया जाता है, तो आप उन सुविधाओं को एकीकृत कर सकते हैं जो ज्यादातर अनुरोधित हैं।

2. हर उपयोग के मामले को भरने से बचें। आपको अपना प्लगइन बनाए रखने की आवश्यकता है। WP हर तीन महीने में एक नया संस्करण प्रदान करता है। और कभी-कभी अपने सभी प्लगइन्स के साथ पालन करना कठिन होता है। एक उदाहरण बनाने के लिए: वर्तमान में Trac पर सेटिंग्स API के एक नए संस्करण पर चर्चा की गई है। जब यह समाप्त हो जाएगा, तो मौका है कि बहुत सारे प्लगइन या थीम डेवलपर्स को कोड के एक बड़े हिस्से को बदलने की आवश्यकता है और कुछ लोगों को - जैसे मेरे - ने भी एपीआई के ऊपर एक अमूर्त परत लिखी है। तो आपको वापस जाने की जरूरत है, अपने आधार / अमूर्त परत को फिर से लिखें और फिर उस चीज को फिर से काम करें जो उस हिस्से को बुलाती है। मैं वादा करता हूं कि यह बहुत काम है। और इससे भी ज्यादा अगर यह आपके कोड के लिए बाध्य है। जब आप बहुत सारे उपयोग के मामलों को भरना शुरू करते हैं, तो आपको बहुत सारे WP कोर कोड डेवलपमेंट भी मिलते हैं, जिनकी आपको निगरानी करने की आवश्यकता होती है, साथ ही आपको अपने कोड को अपडेट रखने में बहुत काम मिलता है।

3. कभी भी अपने प्लगइन्स या थीम में बहुत सारे कोड-उदाहरण (या टेम्पलेट) को बंडल करने का प्रयास न करें। यदि आप डेवलपर्स को लक्षित करना चाहते हैं और अंतिम उपयोगकर्ताओं : प्रलेखन के लिए अपने ब्लॉग का उपयोग करें। डेवलपर्स उस तरह के सामान से नफरत करते हैं और अंत-उपयोगकर्ता कभी संतुष्ट नहीं होते हैं (देखें: प्रत्येक उपयोग के मामले को भरना)।

4. अपने कोड को बुद्धिमानी से सिंगल फाइलों में विभाजित करें। अंगूठे का नियम: एक हिस्से के लिए एक फाइल। उदाहरण: style.php, script.php, taxonomies.php, cpts.php, आदि सब कुछ एक "माँ" (फैक्ट्री) क्लास से लोड करें और अपना सामान "प्लगगेबल" रखें। यदि आपको सामान को फिर से लिखने की आवश्यकता है, तो आप इसे आसानी से पाएंगे। अगर देवता कुछ खोज रहे हैं: वे इसे आसानी से पा लेंगे। बहुत सारी नामी फाइलें, आपको नुकसान नहीं पहुंचातीं।

5. यदि आपको मूल शैलियों (वर्गों) की एक सूची मिली है, तो इसे उपयोगकर्ता पर छोड़ दें । संभावनाएं बहुत अधिक हैं, थीम या अन्य प्लगइन्स से शैली आपकी परिभाषाओं को बाधित करेगी (चाहे आप कितना भी फेंक दें)। बस इसे जितना संभव हो उतना कम पाठ के साथ समझाने की कोशिश करें।

6. अपने प्लगइन से प्यार करें। लेकिन अगर आप ऊब गए हैं तो जाने दें। :)


अब - कम शब्दों में - विस्तार से अपने प्लगइन विचार के बारे में कुछ:

A. टेम्प्लेट फाइलें खराब हैं। जैसा कि मैंने कहा था: इसे अपने ब्लॉग पर दस्तावेज़ित करें, उदाहरण के निशान और शैलियों की पेशकश करें। आपका ब्लॉग लाभान्वित होगा (और यदि आपको विज्ञापन मिला है तो आप भी)।

बी शॉर्टकोड कूल हैं। यदि प्लगइन चला गया है तो वे किसी को भी नुकसान नहीं पहुंचाते हैं (ज्यादातर मामलों में) और बाद में TinyMCE बटन (जिसे वे प्यार करते हैं) तक विस्तारित / विकसित किया जा सकता है।

सी। यह स्पष्ट करें कि आपके प्लगइन को किसी अन्य प्लगइन की आवश्यकता है। इस पर सवाल करें और admin_notices (register_activation_hook के माध्यम से) में एक नोट जोड़ें यदि अन्य प्लगइन बाहर नहीं निकलता है (इस मामले में इसे लिंक करें) या सक्रिय नहीं है (आप सक्रियण पर उपयोगकर्ता के लिए ऐसा कर सकते हैं)। यह भी ध्यान दें कि यह प्लगइन एक विश्वसनीय स्रोत से आता है और इसे अगले वर्षों तक बनाए रखा जाएगा।

नोट: मैंने जो कुछ भी लिखा वह मेरी व्यक्तिगत राय से अधिक कुछ नहीं है, जो मेरे अनुभव को दर्शाता है।


1
TinyMCE (या अन्य) शोर्ट बटन के लिए +1, यह तकनीक नॉन टेक सेवी उपयोगकर्ताओं के लिए इतनी मददगार है और पूरे विषय एकीकरण चीज के साथ मदद करती है।
वीक

1
आपके विचारों के लिए धन्यवाद। यहाँ बहुत सारे सामान्य प्लगइन ज्ञान है। मेरे प्रश्न के संबंध में, ऐसा लगता है कि थीम एकीकरण के संदर्भ में आपका तरीका बहुत कम है; इसके बजाय, आप चाहते हैं कि उपयोगकर्ता इसे प्रलेखन के माध्यम से पता लगाए। मैं देख सकता हूं कि यह एक उचित विधि क्यों है, फिर भी, मैं इस तरह से फाइल करता हूं कि बहुत सारे उपयोगकर्ता महसूस करेंगे कि प्लगइन के भीतर कुछ गायब है। मेरे उदाहरण के साथ, मुझे लगता है कि अगर बैंड / एल्बम / ट्रैक प्रदर्शित करने के लिए समर्थन में नहीं बनाया गया था, तो उपयोगकर्ता ऐसा महसूस करेंगे कि कुछ टूट गया है।
टोलमेनज़

यदि आप साथ रहना चाहते हैं, तो मैं आपको सुझाव दूंगा कि आप वास्तव में एक cpt (या कहीं और अंदर) में मार्क-अप को जोड़ने के लिए एक शोर्ट का उपयोग करें। शैलियों के बारे में: मैं बस जाँच करूँगा कि क्या कोई विशिष्ट स्टाइलशीट बच्चे में कहीं मौजूद है> पैरेंट थीम फ़ोल्डर। यदि हाँ: यह कोर स्टाइलशीट को चुपचाप ओवरराइड / करेगा। इस तरह से आप शायद दोनों डेवलपर्स को अंत-उपयोगकर्ताओं के रूप में संतुष्ट कर सकते हैं।
कैसर

@kaiser ... दोनों ठोस बिंदु।
टॉलमेनज़

2

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

बाजार पर सभी प्रकार के विषयों के साथ भारी एकीकरण करने की कोशिश करने वाला एक प्लगइन बहुत परेशानी का कारण बनता है और ईमानदारी से आपके लिए बहुत काम करता है।

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

यह भी संभावना है कि विपणन के नजरिए से एक आला विषय एक प्लगइन की तुलना में बेहतर होगा जब सामने वाले सुविधाओं को संतुलित करना।


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

2

आभासी पृष्ठ

मैंने देखा कि एक तीसरी तकनीक आपके प्लगइन के लिए प्लेसहोल्डर के रूप में एक विशेष पृष्ठ असाइन कर रही थी और आउटपुट के लिए आपको जो कुछ भी आवश्यक था, उसे आउटपुट करने के लिए 'the_content' फ़िल्टर का उपयोग करें।

इस प्रकार, आप थीम संरचना के साथ मिश्रण करने वाले टेम्पलेट बना सकते हैं, क्योंकि आपको हेडर, साइडबार, फूटर्स और रैपर divs से निपटना नहीं है।

इसका एक बड़ा उदाहरण bbPress प्लगइन में पाया जा सकता है:

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


क्या आप एक कोड नमूना पेश करेंगे? मुझे लगता है कि यह एक बहुत कुछ है dev.s को देखना अच्छा लगेगा। (+1)।
केसर

आप एक उदाहरण के लिए नए bbPress प्लगइन को देख सकते हैं।
scribu

यह बहुत दिलचस्प है। मुझे निर्णय पारित करने से पहले कोड को देखना होगा।
टॉलमैनज

@ स्क्रिप: मैं एक लिंक जोड़ने के लिए इसे खोज रहा था, लेकिन मैं इसे plugins.svn के माध्यम से नहीं ढूँढ सकता। क्या आप बाद के पाठकों के लिए एक लिंक पोस्ट कर सकते हैं? धन्यवाद।
kaiser

यह वहीं है: wordpress.org/extend/plugins/bbpress :)
scribu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.