अपना कोड कहां डालें: plugin या functions.php?


86

क्या यह समझना आसान है कि किसी प्लगइन या थीम का कोड किस तरह का है functions.php?

वहाँ रहे हैं कई मामलों और कई बहस उस विषय के बारे में ज्यादातर क्योंकि वहाँ वर्डप्रेस की अंदरूनी कामकाज के बारे में कुछ गलतफहमी हैं। मैं तथ्यों के आधार पर जवाब मांग रहा हूं, राय के आधार पर नहीं।

यह बताना चाहिए कि इन बिंदुओं को कैसे संभालना है (और शायद अधिक):

  • कस्टम पोस्ट प्रकार और वर्गीकरण
  • संपर्क प्रपत्र
  • लघुकोड
  • कस्टम विजेट
  • add_theme_support( 'automatic-feed-links' );
  • एसईओ कस्टम metaतत्वों की तरह कार्य करता है
  • विषय स्विच

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

चिप बेनेट द्वारा संबंधित सवाल हमारी मेटा साइट पर भी देखें: विशेष रूप से "एक प्लगइन के बिना" समाधान के लिए प्रश्न पूछें

संबंधित: मैं अपने यहां या कहीं और वेब पर पाए गए कोड स्निपेट्स को कहां रखूं?


मुझे आश्चर्य है कि इस प्रश्न के उद्देश्य के लिए तथ्य क्या होंगे। व्यक्ति ए का कहना है कि सीपीटी प्लगइन में जाता है, व्यक्ति बी कहता है कि सीपीटी थीम में जाएं। हम किसी एक राय को कैसे मान्य कर सकते हैं? यह खतरनाक रूप से "रचनात्मक नहीं" के करीब हो सकता है।
रार्स्ट नोव

जवाबों:


72

मैं इस प्रश्न के साथ शुरू करूंगा: क्या सामग्री की प्रस्तुति से संबंधित कार्यक्षमता , या सामग्री के उत्पादन / प्रबंधन , या साइट या उपयोगकर्ता की पहचान से संबंधित है?

यदि कार्यक्षमता विशेष रूप से सामग्री की प्रस्तुति से संबंधित नहीं है , तो यह प्लगइन क्षेत्र के भीतर है। यह सूची लंबी है:

  • कोर WP फिल्टर को संशोधित करना ( wp_headसामग्री, जैसे कि कैनोनिकल लिंक, जनरेटर और अन्य HTML मेटा, आदि
  • साइट फेविकॉन
  • पोस्ट-कंटेंट शॉर्टकोड
  • पोस्ट शेयरिंग लिंक
  • Google Analytics (और समान) पाद लेख स्क्रिप्ट
  • एसईओ उपकरण / नियंत्रण
  • आदि।

कार्यक्षमता तो संबंधित है के लिए सामग्री की प्रस्तुति है, तो यह एक है उम्मीदवार विषय में शामिल किए जाने के लिए। इस बिंदु पर, मैं @ Raf912 के थीम-स्विच की कसौटी पर लौटूंगा : क्या आप थीम को स्विच करते समय कार्यक्षमता को याद करेंगे? यदि उस प्रश्न का उत्तर नहीं है , तो कार्यक्षमता थीम में है। कुछ उदाहरण:

  • WP कोर गैलरी CSS को निकालना / ओवरराइड करना
  • फ़िल्टरिंग पोस्ट अंश लंबाई, "और पढ़ें" पाठ, आदि।
  • के माध्यम से कार्यान्वित कुछ भी add_theme_support()(मुझे लगता है कि यह स्पष्ट होना चाहिए)
  • कस्टम सीएसएस

आम तौर पर, ये दो प्रश्न भेदभाव की काफी स्पष्ट रेखा प्रदान करेंगे; हालाँकि, इसके कुछ अपवाद भी हैं।

कस्टम पोस्ट प्रकार

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

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

सोशल मीडिया लिंक

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

तो फिर, दीर्घकालिक, इस असमानता का समाधान यह बताने के लिए है कि इन लिंक्स को परिभाषित किया गया है, या फिर थीम डेवलपर समुदाय के लिए अपनी सहमति बनाने के लिए। इस बीच, वास्तव में इसके लिए कुछ भी नहीं है, लेकिन प्रत्येक थीम के भीतर उन्हें परिभाषित रखने के लिए।


add_theme_support( 'automatic-feed-links' );प्रस्तुतिकरण नहीं है। लेकिन यह विषय के दिशानिर्देशों द्वारा आवश्यक है । थीम स्विच के बाद इस कार्यक्षमता को ढीला करना एक आवश्यक जोखिम क्यों है?
FUXIA

1
जो कुछ भी लागू किया जाता है add_theme_support()वह केवल थीम के माध्यम से लागू किया जा सकता है। add_theme_support( 'automatic-feed-links' )थीम के भीतर उपयोग करना वास्तव में थीम से थीम तक एक सुसंगत अनुभव सुनिश्चित करता है, क्योंकि उत्पन्न फीड लिंक समान होंगे।
चिप बेनेट

4
मुझे लगता है कि यह गलत है: फ़ीड लिंक प्रस्तुतिकरण नहीं हैं। यदि अगला विषय उस फ़ंक्शन को कॉल नहीं करता है, तो उपयोगकर्ता फ़ीड लिंक खो देगा। और आप बिना किसी समस्या के उस प्रति प्लगइन को जोड़ सकते हैं। इसलिए मैं इसे लेकर उलझन में हूं। :)
FUXIA

1
आप जानते हैं: यह एक अच्छी बात है। :)
चिप बेनेट

50

एक आसान परीक्षा जहां कोड सबसे अच्छा रखा जाता है:

  • कोड को functions.php में लिखें
  • विषय स्विच करें
  • क्या आपको कार्यक्षमता याद आती है, क्या ब्लॉग सही काम नहीं कर रहा है या पुराने विषय (जैसे शॉर्टकोड) के टुकड़े बाकी हैं?

    • हाँ: इसे एक प्लगइन में डालें

    • no: इसे functions.php में छोड़ दें

उदाहरण: एक शोर्ट लिखें। विषय स्विच करने के बाद, सादे शॉर्टकोड आपकी पोस्ट में छोड़ दिए जाते हैं। इसलिए इसे बेहतर तरीके से प्लगइन में रखा जाएगा।

अंतिम टिप्पणियों को सूचीबद्ध करने के लिए एक फ़ंक्शन लिखें। विषय को स्विच करने के बाद, सब कुछ ठीक है क्योंकि शायद दूसरे विषय में एक समान फ़ंक्शन है।

यह वास्तव में कोड पर निर्भर करता है और यह क्या करेगा। कुछ कोड केवल स्टाइल या विषयवस्तु को प्रभावित करते हैं, कुछ अन्य ब्लॉग पोस्टों को संशोधित करेंगे।


11
+1 यदि कोड थीम के लिए विशिष्ट है, तो इसे डालें functions.php। यदि इसे एक से अधिक थीम पर लागू करने की आवश्यकता है, तो इसे एक प्लगइन में डालें।
s_ha_dum

18

मुझे नहीं लगता कि इस सवाल का कोई आसान जवाब है, लेकिन मुझे यकीन है कि हम निर्णय के साथ मदद करने के लिए एक फ्लो चार्ट बना सकते हैं। यहां इस तरह के प्रवाह चार्ट की एक मोटी रूपरेखा है, जिसे विस्तारित किया जा सकता है। सुझावों के साथ टिप्पणी करें!

  • क्या यह कोड वर्डप्रेस की एकल-साइट स्थापना पर होस्ट किया जाना है?
    • हां - क्या साइट की थीम केवल प्रमुख रीडिज़ाइन और कार्यक्षमता में बदलाव के साथ बदलती है?
      • हां - क्या प्रश्न इस वर्तमान डिज़ाइन के लिए विशिष्ट है ?
        • हाँ: कार्य
        • नहीं: प्लगिन
      • नहीं (यह अक्सर या एक बार में बदलता है) - प्लगइन
    • नहीं (Multsisite) - क्या आप मल्टीसाइट इंस्टॉलेशन की मेजबानी कर रहे हैं या यह एक होस्ट किया गया मल्टीसाइट समाधान है जो प्लगइन्स की अनुमति देता है?
      • हां: क्या इस साइट की कार्यक्षमता विशिष्ट है , या इसका उपयोग नेटवर्क में अन्य साइटों द्वारा किया जा सकता है / होना चाहिए?
        • इस साइट के लिए विशिष्ट: functions.php
        • कई साइटों के बीच साझा किया गया - क्या आप इसे हर साइट पर लागू करना चाहते हैं?
          • हां: प्लग-इन, म्यू-प्लगर्स डायरेक्टरी या नेटवर्क-ऐक्टिवेट में संग्रहीत
          • नहीं: क्या यह असंबंधित साइटों का नेटवर्क है? (उदा। विभिन्न ग्राहक)
            • हाँ: यदि ग्राहक A ने B, C, और D के लिए लिखे गए प्लगइन को देखा या सक्रिय किया है तो क्या यह खराब या अव्यवसायिक होगा? (उदाहरण के लिए शायद यह साइट को तोड़ देगा या अवांछनीय कार्यक्षमता का कारण होगा)
              • हाँ: कार्य
              • नहीं: प्लगिन
            • नहीं: शायद प्लगइन
      • नहीं (वीआईपी की तरह एक सेवा द्वारा होस्ट किया गया है जो प्लगइन्स की अनुमति नहीं देता है): functions.php का उपयोग करें
कुछ अन्य विचार जो मुझे नहीं पता थे कि मैं यहां कैसे फिट हो सकता हूं:

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

6

यहाँ से थीम्स वी.एस. प्लगिन्स

कस्टम थीम को चाइल्ड थीम में जोड़ें ताकि जब आप पैरेंट थीम को अपडेट करें, तो आपका कस्टम कोड खो न जाए।

आप एक साइट विशिष्ट प्लगइन भी बना सकते हैं जिसमें आपका सभी कस्टम कोड भी हो।

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

 function modify_contact_methods($profile_fields) {

// Add new fields
$profile_fields['twitter'] = 'Twitter Username';
$profile_fields['facebook'] = 'Facebook URL';
$profile_fields['gplus'] = 'Google+ URL';

return $profile_fields;
}
add_filter('user_contactmethods', 'modify_contact_methods');

http://codex.wordpress.org/Plugin_API/Filter_Reference/user_contactmethods

  1. नए कस्टम पोस्ट प्रकार जोड़ें - कोड
  2. उपयोगकर्ताओं के लिए नए फ़ील्ड जोड़ें - कोड ऊपर
  3. नए विगेट्स जोड़ें - कोड
  4. कस्टम पर्मलिंक जोड़ें - वर्डप्रेस पर्मलिंक सेटिंग्स

5

मुझे पता है कि यह एक मृत घोड़ा है और उस चिप ने इसे बहुत कवर किया है, लेकिन कुछ विचार जोड़ना चाहते हैं।

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

अधिक बार नहीं, खासकर उन लोगों के लिए जो बस शुरू कर रहे हैं, यह बहुत तेज़ और सरल है कि आपको जो भी ज़रूरत है उसे एक थीम में जोड़ें और इसे कॉल करें।

कहा जा रहा है, यदि आप एक नियमित आधार पर वर्डप्रेस पर काम करते हैं , तो आपको निम्नलिखित पर गंभीरता से विचार करना चाहिए :


  1. एक प्लगइन कंकाल बनाएँ

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

यदि आप ऐसा करने का समय बनाते हैं, तो आप पाएंगे:

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

अब आप चीजों को ठीक से बना सकते हैं और भविष्य की परियोजनाओं को और अधिक तेजी से पूरा कर सकते हैं ।


  1. एक विषय कंकाल बनाएँ

यह एक विषय में आमतौर पर आवश्यक सभी चीजों को संभालना चाहिए:

  • एक कोर स्टाइल शीट जिसमें आप आमतौर पर उपयोग की जाने वाली शैलियाँ (रीसेट, आदि) हैं।
  • एक उचित index.php फ़ाइल, किसी भी टेम्पलेट के लिए आपकी ज़रूरत की हर चीज़ को संभालना
  • एक functions.php फ़ाइल - आप इसे लगभग उतना ही उपयोग नहीं करेंगे, लेकिन यह अभी भी काम में आएगा।

एक बार जब आप ऐसा कर लेते हैं, तो एक बच्चे के थीम कंकाल का निर्माण करें जो आपके प्राथमिक विषय का उपयोग करता है।

  • अपने मूल विषय को संदर्भित करते हुए स्टाइलशीट जोड़ें।
  • Functions.php फ़ाइल को जोड़ें

एक बार जब आप इन दो चीजों को कर लेते हैं, तो लोगों के लिए नई साइटें बनाना बहुत तेज हो जाता है।


यदि आप ऊपर करते हैं, तो आप निम्नलिखित पर काम कर सकते हैं:

  • अपने नए पाए गए खाली समय को PHP, वर्डप्रेस, जावास्क्रिप्ट, CSS, और / या mySQL से अधिक परिचित होने में बिताएं ... जितना अधिक आप इनसे सीखेंगे उतनी ही तेजी से आप चीजों को पूरा करेंगे।
  • अपने प्लगइन, थीम और चाइल्ड थीम के कंकाल को अपडेट करें क्योंकि आपको ऐसी चीजें मिलेंगी जो आपको सुधारनी चाहिए। कोई फर्क नहीं पड़ता कि आप कितने अच्छे हैं, यदि आप सीखते रहते हैं तो आपको किए जाने वाले सुधार मिलेंगे।

और, यदि आप उपरोक्त सभी करते हैं, तो आप पाएंगे कि चिप का उत्तर न केवल आदर्श होगा, बल्कि यह इष्टतम हो जाएगा।


3

सीधा सा जवाब है ये ।।

क्या कोड किसी विशिष्ट विषय में निर्मित कार्यक्षमता पर निर्भर है? यदि हाँ, तो एक विषय में डालें।

क्या आप चाहते हैं कि यह कोड साइटों के बीच और थीम के बीच हस्तांतरणीय हो? यदि हाँ, तो एक प्लगइन में डाल दिया।

यदि उत्तर उपरोक्त दोनों के लिए नहीं है, तो भविष्य में साइट को 5 साल के लिए तस्वीर दें, जब यह रीडिज़ाइन का समय हो। क्या कोड का कार्य आप ऐसा कुछ लिख रहे हैं जो अगले डिज़ाइन अपडेट से बचेगा? यदि हाँ, एक प्लगइन में डाल दिया।

इसके अलावा, यदि आप बाल थीम का उपयोग नहीं कर रहे हैं और आप थीम को अपडेट करने की योजना बना रहे हैं, तो मेरा सुझाव है कि आप एक प्लगइन का उपयोग करें।

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