Is_page_template () के खिलाफ क्या तुलना करता है?


10

Wordpress प्रलेखन के माध्यम से देखते हुए , यह कहता है कि is_page_template()"टेम्पलेट नाम" के खिलाफ तुलना की जाती है, यदि कोई प्रदान किया जाता है।

मेरे पास एक टेम्पलेट है page-homepage.phpजिसे कॉल किया जाता है Homepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

और मेरे पास कुछ कोड हैं जिन्हें मैं अपने कार्य में चलाना चाहता हूं। जब मैं उस टेम्पलेट का उपयोग कर रहा हूं:

if (is_page_template('Homepage')) { 
   ...

लेकिन यह तब शुरू नहीं हो रहा है जब मैं एक ऐसे पृष्ठ पर हूं जो उस टेम्पलेट का उपयोग करता है।

जब मैं उस कोड को देखता हूं जिसके लिए Wordpress निष्पादित होता है is_page_template(), तो ऐसा लगता है कि यह वास्तव में दस्तावेज़ के नाम की जांच करता है, न कि टेम्पलेट नाम ...?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

मेरे उदाहरण में ऐसा लगता है कि $page_templateहै page-homepage.php-, नहीं टेम्पलेट का नाम प्रलेखन की तरह चलता है ...?

क्या मुझसे कुछ गलत हो रही है?


प्रलेखन के संबंध में अच्छा अवलोकन।
बीरगिर

जवाबों:


15

आपकी हालत इस तरह लिखी जानी चाहिए:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

मेरा मानना ​​है कि भ्रम दो चीजों का परिणाम है:

  1. डॉक्स अस्पष्ट रूप से "नाम" का उल्लेख करते हैं। "फ़ाइल नाम" निर्दिष्ट करने से प्रलेखन बहुत अधिक स्पष्ट हो जाएगा।
  2. पीछे कोड अपने मूल is_page_template()में get_page_template_slug()फ़ंक्शन को दर्शाता है । यह फ़ंक्शन वास्तव में एक फ़ाइल नाम देता है, न कि टेम्प्लेट स्लग। https://codex.wordpress.org/Function_Reference/get_page_template_slug

is_page_template()फ़ंक्शन के लिए एक तर्क निर्दिष्ट करते समय (ऊपर उदाहरण में), फ़ाइल पथ थीम रूट के सापेक्ष है।

यह फ़ंक्शन लूप के अंदर काम नहीं करेगा।


2
यह स्पष्ट करना अच्छा होगा कि यहां कौन सा मार्ग खड़ा है।
बीरगिरे

1
अतिरिक्त स्पष्टीकरण और विवरण जोड़ा गया कि यह भ्रामक क्यों हो सकता है।
jdm2112

3
वाह। भ्रम की दोहरी मार। मैं डॉक्स को थोड़ा अस्पष्ट समझ सकता हूं (हालांकि यह वास्तव में तय होना चाहिए), लेकिन मुझे वास्तव में आश्चर्य है कि get_page_template_slug()वास्तव में एक स्लग वापस नहीं करता है!
जोंगो रेनहार्ड्ट

माना। इस धारणा को और समर्थन देते हुए कि कोड लिखते समय "चीजों का नामकरण" सबसे कठिन चीजों में से एक है।
jdm2112

इस उत्तर में "सर्वोत्तम अभ्यास" समाधान शामिल है। हालाँकि, यदि आपका पृष्ठ "डिफ़ॉल्ट टेम्प्लेट" का उपयोग कर रहा है (लेकिन यह वास्तव में एक पेज टेम्प्लेट है), तो यह उत्तर आपको रूचि दे सकता है।
rinogo

7

मुझे लगता है कि सबसे अच्छी बात यह है कि, यह फ़ाइल नाम पर जाँच करता है और आपके मामले में यह पृष्ठ-होमपेज होगा। इसलिए:

if (is_page_template('page-homepage.php')) { 
  ...

सोचने वाली अन्य बातें यह है कि क्या टेम्प्लेट फ़ाइल वास्तव में थीम के अंदर किसी अन्य फ़ोल्डर में संग्रहीत है। अधिक पढ़ें

एक और बात, Template Name: Homepageसामान्य रूप से एक पृष्ठ या पोस्ट बनाते समय टेम्पलेट की पहचान करने के लिए इस्तेमाल किया जाने वाला व्हाट्सएप है।


जैसा कि एक अन्य उत्तर बताता है - यह भी ध्यान में रखता है। page-templates/page-homepage.phpथीम रूट में टेम्पलेट से अलग है।
Howdy_McGee

दिलचस्प और कुछ ऐसा जो मुझे नहीं पता था, बस पुष्टि करने के लिए, मैं थीम या चाइल्ड थीम फ़ोल्डर के बाहर पेज टेम्पलेट स्टोर कर सकता हूं?
मालिसा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.