वर्डप्रेस थीम चर गुंजाइश


9

मुझे एक वैरिएबल बनाने की आवश्यकता है जिसे मेरे वर्डप्रेस थीम टेम्पलेट फाइलों (index.php, header.php आदि ..) तक पहुँचा जा सकता है। मुझे पता है कि फंक्शंस की परिभाषा functions.phpटेम्प्लेट फ़ाइल (आपके थीम पथ) के अंदर जाती है, लेकिन चर के लिए ऐसी कोई बात नहीं है।

उदाहरण के लिए मुझे अपने थीम में श्रेणियाँ पुनः प्राप्त करने की आवश्यकता है, इसलिए मैं अपने विषय में कहीं से भी यह सुलभ होना चाहूंगा:

$categories = get_categories(); /* get_categories() is a wordpress function */ 

इस तरह मैं केवल आवंटित डेटा प्राप्त कर सकता हूं, इसे हर बार फिर से आवंटित करने के बिना मुझे अपनी श्रेणियां प्राप्त करने की आवश्यकता होगी।

दुर्भाग्य से मेरी functions.phpफ़ाइल में कोड के उस टुकड़े को जोड़ने से काम नहीं चलता है, न ही परिवर्तनशील बनता है global

जवाबों:


5

स्पष्ट रूप globalसे चाल है। समस्या यह थी कि मेरे चर $categoriesको इसके सामने एक के साथ फिर से परिभाषित किया जाना चाहिए था global, प्रत्येक टेम्पलेट में मुझे इसका उपयोग करने की आवश्यकता थी।


2
क्या हर टेम्पलेट फ़ाइल में वैश्विक रूप में इसे फिर से परिभाषित करने की तुलना में किसी और अधिक सहज समाधान का पता है? मैं अपने विषय को विकसित करने में इस पद्धति का उपयोग करता हूं और यह दिखता है ... जगह से बाहर।

1
बहुत बढ़िया दोस्त, धन्यवाद! किसी के लिए भी यह तैयार है जो मेरी तरह थोड़ा मोटा है: अपने कार्यों में। php फ़ाइल: <? Php $ test = I is a test! "। ?> आप में, मुझे नहीं पता है, शीर्ष लेख। php: <? Php global $ test; इको $ टेस्ट; ?> और तुम सुनहरे हो!
डोमिनिक

वर्डप्रेस में टेम्पलेट फ़ाइलों के सभी द्वारा कहा जाता है: इस स्पष्ट करने के लिए मदद करता है, तो require()बयान जो कार्यों में लिपटे रहे हैं: get_header(), get_footer(), आदि; जो स्वयं फंक्शन के आसपास रैपर हैं get_template_part()। चूंकि PHP में फ़ंक्शन केवल उनके भीतर परिभाषित चर तक पहुंचते हैं या उनके संदर्भ में पारित किए जाते हैं, यदि आप वैश्विक दायरे से एक चर का उपयोग करना चाहते हैं (या एक चर को परिभाषित करें और इसे वैश्विक दायरे में सुलभ बनाएं) तो आपको इसकी घोषणा करनी होगी पहले वैश्विक कीवर्ड के साथ ।
सुनहरा अंक

1

डोमिनिक (अपने उत्तर में नोट जोड़ना नहीं जानता):

परिभाषित केवल स्केलरों को स्वीकार करता है, इसलिए आप ऐसा नहीं कर सकते define( CATS, get_categories() ); और नहीं भी

$categories = get_categories();
define( CATS, $categories );

अन्यथा ठीक काम को परिभाषित करता है, और यह वास्तव में स्केलरों के लिए सुरक्षित है (जैसा कि आप सुनिश्चित कर सकते हैं कि स्थिरांक को अधिलेखित नहीं किया जा सकता है)


1

मुझे पता है कि यह वास्तव में पुराना है, लेकिन सुधार के लिए एक जगह है।

आपको केवल वैश्विक के बजाय $ GLOBALS ['श्रेणियों'] का उपयोग करने पर विचार करना चाहिए।

इसके लिए दो कारण हैं:

  1. हमें global $categories;हर बार लिखना नहीं है ।
  2. यह स्पष्ट है कि हम वैश्विक उपयोग कर रहे हैं और फिर नहीं।

इस कोड पर विचार करें:

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

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

इसके लिए नामकरण सम्मेलनों का उपयोग करना संभव है, लेकिन एक बेहतर तरीका है, मेरी राय में।

का उपयोग करने पर विचार करें $GLOBALS['categories']

हमें केवल अपने वैरिएबल को एक बार फंक्शन्स में global $categoriesलगाना है। फिर बिना सोचे समझे । और हम देख सकते हैं कि यह एक वैश्विक है।

print_r ($GLOBALS['categories']);

इस स्थिति में प्रदर्शन का मुद्दा कोई मुद्दा नहीं है। मैं सारा गोलेमोन ( लिंक ) को उद्धृत करूंगा :

$ GLOBALS सरणी के आपके उपयोग के लिए इसका क्या अर्थ है? यह सही है, वैश्विक कीवर्ड तकनीकी रूप से तेज है। अब, मैं यहाँ एक बात के बारे में स्पष्ट होना चाहता हूँ। आपके ग्लोबल्स को स्थानीयकृत [संकलित चर] के रूप में उपयोग करके दी गई मामूली गति की वहनशीलता को पांच वर्षों में आपके कोड को देखने की स्थिरता के खिलाफ गंभीरता से तौला जाना चाहिए और यह जानना चाहिए कि $ foo वैश्विक दायरे से आया है। something_using ($ वैश्विक [ 'foo']); क्या आपके लिए वैश्विक $ foo की तुलना में नीचे लाइन स्पष्ट होगी; / * बंच कोड * / something_using ($ फू); पैसे के लिहाज से और मूर्ख मत बनो ..


0

यह भी काम करता है:

कार्यों में। जोड़ define('TEST', 'this is a test');
और अपने शीर्ष लेख मेंecho TEST;

क्या किसी एक विधि का दूसरे से अधिक लाभ है?

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