एक प्लगइन में get_template_part () का उपयोग करके एक फ़ाइल कैसे शामिल करें?


13

एक बहुत ही सरल सवाल हो सकता है, लेकिन मैं संघर्ष कर रहा हूं। थीम के विकास में, मैंने get_template_part()कई बार साथ काम किया , और मैं इसकी मूल बातें समझता हूं। लेकिन जब मैं एक प्लगइन विकसित कर रहा हूं, तो मुझे आश्चर्य हुआ कि इसका उपयोग करके मुझे कुछ त्रुटियां दिखाई दे रही हैं:

सूचना: अपरिभाषित स्थिर STYLESHEETPATH ​​का उपयोग - ...\wp-includes\template.php407 लाइन पर 'STYLESHEETPATH' मान लिया गया

तथा

सूचना: अपरिवर्तित निरंतर TEMPLATEPATH का उपयोग - ...\wp-includes\template.phpऑन लाइन 410 में 'TEMPLATEPATH' माना गया

समस्या को ठीक करने में सहायता समर्थन दिखाया गया है:

लेकिन यह एक बहुत बड़ा हल लगता है - मुझे इसमें संदेह है। मुझे लगता है कि बहुत जटिल नहीं होना चाहिए। मैं इस WPSE उत्तर की जाँच की और कोड की इस लाइन पाया:

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

जहां PHP include()फंक्शन होता है। अपने वर्डप्रेस ज्ञान के अनुसार मैंने get_template_part()PHP से अधिक पसंद करना सीखा include()। फिर मैं get_template_part()अपने प्लगइन में एक साधारण का उपयोग कैसे कर सकता हूं।

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

get_template_part( 'my', 'special-admin' );

और फिर त्रुटि के बाद, इसे इसमें बदल दिया:

get_template_part( 'my', 'specialadmin' );

लेकिन आप जानते हैं कि यह मुद्दा नहीं है। मैं WAMP का उपयोग करके स्थानीय सर्वर पर हूं।

जवाबों:


11

get_template_partएक थीम फंक्शन है। आप उस फ़ंक्शन के साथ प्लगइन फ़ाइलों को लोड नहीं कर सकते। स्रोत पर एक नज़र डालें और आप नोटिस करेंगे कि काम किसके द्वारा किया गया है locate_templateउस स्रोत को देखें और आप देखेंगे कि यह हमेशा थीम निर्देशिकाओं से लोड होता है ।

हालाँकि आप इसका उपयोग करना चाहते हैं लेकिन get_template_partयह गलत कार्य है।

आपको includeअपनी फ़ाइलों की आवश्यकता होगी ।

कारण, ऐसा मुझे लगता है, के लिए get_template_partविषयों को विस्तारित करने की अनुमति है - उर्फ, बाल विषयों के निर्माण को आसान बनाने के लिए। प्लगइन्स को उस तरह से विस्तारित करने का इरादा नहीं है, इसलिए get_template_partकिसी भी प्लगइन के बराबर या उसके लिए कोई आवश्यकता नहीं है ।


6

@s_ha_dum सही है get_template_partजो एक थीम फ़ंक्शन है, लेकिन वह गलत है कि प्लगइन्स को इस तरह से विस्तारित करने का इरादा नहीं है। यह बस अधिक जटिल है।

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

अनिवार्य रूप से, यह विषय में एक विशेष फ़ोल्डर में दिखता है, फिर अगर वहां नहीं मिला, तो यह प्लगइन के लिए टेम्पलेट्स फ़ोल्डर में दिखता है।


4

जैसा कि पहले कहा गया था, आप get_template_partप्लगइन्स में उपयोग नहीं कर सकते हैं , लेकिन गिथब (गैरी जोन्स द्वारा बनाई गई) पर एक आसान वर्ग हैget_template_part जो प्लगइन्स में कार्यक्षमता की नकल करता है, प्लगइन को फॉलबैक में जोड़ता है (बच्चे विषय> मूल विषय> प्लगइन)।

इस तरह, आप एक बच्चे के विषय या माता-पिता के विषय के अंदर अपने प्लगइन के "टेम्पलेट भाग" को ओवरराइड कर सकते हैं।

उपयोग (जीथब रेपो निर्देशों से लिया गया):

  1. class-gamajo-template-loader.phpअपने प्लगइन में कॉपी करें। यह प्लगइन रूट में एक फ़ाइल में हो सकता है, या बेहतर, एक निर्देशिका शामिल कर सकता है।
  2. एक class-your-plugin-template-loader.phpही डायरेक्टरी में एक नई फाइल बनाएं, जैसे कि ।
  3. classउस फ़ाइल में एक बनाएँ जो फैली हुई है Gamajo_Template_Loader
  4. अपने प्लगइन के अनुरूप वर्ग के गुणों को ओवरराइड करें। get_templates_dir()यदि यह आपके लिए सही नहीं है तो आप इस विधि को ओवरराइड भी कर सकते हैं।
  5. अब आप अपने कस्टम टेम्प्लेट लोडर क्लास को इंस्टेंट कर सकते हैं, और इसका उपयोग get_template_part()विधि को कॉल करने के लिए कर सकते हैं । यह एक शोर्ट कॉलबैक के भीतर हो सकता है, या कुछ आप थीम डेवलपर्स को अपनी फ़ाइलों में शामिल करना चाहते हैं।

उदाहरण कोड:

// Template loader instantiated elsewhere, such as the main plugin file.
$meal_planner_template_loader = new Meal_Planner_Template_Loader;

// Use it to call the get_template_part() method. This could be within 
// a shortcode callback, or something you want theme developers 
// to include in their files.
$meal_planner_template_loader->get_template_part( 'recipe' );

// If you want to pass data to the template, call the set_template_data() 
// method with an array before calling get_template_part().        
// set_template_data() returns the loader object to allow for method chaining.
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data );
    ->get_template_part( 'recipe' );

// The value of bar is now available inside the recipe template as $data->foo.
// If you wish to use a different variable name, add a second parameter 
// to set_template_data():
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data, 'context' )
    ->get_template_part( 'recipe', 'ingredients' );

// The value of bar is now available inside the recipe template as $context->foo.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.