2017-08-30 38 views
11

मैं डैशबोर्ड में 'पृष्ठ संपादित करें' पृष्ठ पर उपयोग किए गए टेम्पलेट के फ़ाइल नाम/पथ को पुनर्प्राप्त करने का प्रयास कर रहा हूं।यह पता लगाना कि कौन सा वर्डप्रेस टेम्पलेट व्यवस्थापक पृष्ठ से किसी पृष्ठ के लिए उपयोग किया जाता है

wp-includes/template-loader.php (source) के समान ही सामने वाला है: यह पता लगाने के लिए कि कौन सा टेम्पलेट प्रस्तुत करना है।

दुर्भाग्यवश, is_front_page() जैसे अभिव्यक्ति - जो Wordpress 'template-loader.php यह पता लगाने के लिए उपयोग करता है कि इसे get_front_page_template() का उपयोग करना चाहिए - व्यवस्थापक पृष्ठ पर सही तरीके से काम न करें। जिसकी अपेक्षा की जा सकती है क्योंकि वे अभिव्यक्ति वैश्विक $ wp_query ऑब्जेक्ट का उपयोग करती है, न कि वर्तमान क्वेरी।

क्या मैं अब तक की कोशिश की है:

एक पोस्ट पाश व्यवस्थापक पृष्ठ के अंदर

$args = array(
    'p' => get_the_ID(), 
    'post_type' => 'any' 
); 

$query = new \WP_Query($args); 

if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?> 

    <?= the_title(); ?><br> 
    Is front page: <?= is_front_page() ? 'true' : 'false' ?> 

<?php endwhile; endif; ?> 

प्रदर्शित करता चल रहा है:

होम

पहले पन्ने है: झूठा

का उपयोग get_post_meta

<?= get_post_meta(get_the_ID(), '_wp_page_template', true); ?> 

प्रदर्शित करता है:

डिफ़ॉल्ट

... जो घर और page.php पर सामने page.php के लिए ही होगा एक और डिफ़ॉल्ट पृष्ठ पर, यह मेरी मदद नहीं करता है।

कम

में क्या मैं पाने के लिए कोशिश कर रहा हूँ front-page.php जब मैं संपादन कर रहा हूँ मेरी 'होम' पेज है। या custom-template.php जब मैं चयनित कस्टम टेम्पलेट के साथ कुछ पेज संपादित कर रहा हूं। या about-page.php जब मैं 'बारे में' नामक एक पृष्ठ संपादित कर रहा हूं। सही फ़ाइल नाम या पथ कैसे प्राप्त करें?

+0

मुझे सामने वाले अंत में टेम्पलेट फ़ाइल नाम युक्त मेटा टैग जोड़कर और सही फ़ाइल नाम प्राप्त करने के लिए बैकएंड से 'get_meta_tags' का उपयोग करके इस समस्या का समाधान मिला है। हालांकि यह काम करता है, मैं सोच रहा हूं कि क्या एक और अधिक सुरुचिपूर्ण समाधान है। अब एक बक्षीस शुरू कर रहा है। – kapser

+0

आप ऊपर कोड प्रयास कैसे चला रहे हैं? एक हुक के माध्यम से? – Steve

+0

संक्षेप में: 'wp_head' हुक का उपयोग करके मेटा टैग डाला गया है। [इस एक] के समान कार्य का उपयोग करना (https://github.com/WordPress/WordPress/blob/master/wp-includes/template-loader.php#L44) सही टेम्पलेट पथ मेटा टैग में लोड किया गया है। फिर, कर्ल या get_meta_tags का उपयोग करके (दोनों ने कोशिश की, दोनों काम किया), मैंने बैकएंड से मेटा टैग पढ़ा। यह काम करता है, लेकिन यह एक गंदे समाधान की तरह लगता है। – kapser

उत्तर

2

उपयोग get_page_template():

<?php echo realpath(get_page_template()); ?> 

ऐसा लगता है कि /foo/bar/baz/wp-content/themes/your-theme/{page-template}.php

कुछ आप realpath() उपयोग करने के लिए नहीं है और बस टेम्पलेट का नाम पाने के लिए चुन सकते हैं आउटपुट।

+0

यह पृष्ठ टेम्पलेट को पृष्ठ पर सेट करता है, न कि उस टेम्पलेट को जो वास्तव में लोड किया गया है। उदाहरण के लिए, डैशबोर्ड में जब मैं होमपेज संपादित कर रहा हूं तो यह 'पथ/से/टेम्पलेट/पेज.एचपीपी' देता है जबकि यह वास्तव में 'पथ/से/टेम्पलेट/फ्रंट-पेज.एचपी' लोड करता है, क्योंकि वर्डप्रेस उस पर वरीयता देता है । – kapser

+0

यह फ़ंक्शन वर्तमान पृष्ठ पर निर्दिष्ट टेम्पलेट लौटाता है। अवधि। यदि आपको "डिफ़ॉल्ट" या page.php मिल रहा है, तो आपने पृष्ठ संपादन स्क्रीन में एक कस्टम टेम्पलेट सेट नहीं किया है ... या, यह डीबी को सहेज नहीं रहा है। वर्डप्रेस पृष्ठ पर असाइन किए गए टेम्पलेट को लोड करता है, और यदि कोई नहीं है, तो यह टेम्पलेट पदानुक्रम के आधार पर अपने स्वयं के डिफ़ॉल्ट का पालन करता है। यदि यह फ़ंक्शन आपको वह नहीं दे रहा है जिसे आप देखना चाहते हैं, या कोई अन्य टेम्पलेट लोड हो रहा है, तो यह फ़ंक्शन आपको देता है, तो आपको अपने टेम्पलेट्स और घोषणाओं को फिर से परिभाषित करने की आवश्यकता होती है। – Spartacus

+0

बिल्कुल, वर्डप्रेस टेम्पलेट पदानुक्रम का पालन करता है। जो get_page_template() के परिणामों में दिखाई नहीं देता है। जब मैं आपके फ़ंक्शन को 'front-page.php' फ़ाइल में प्रतिबिंबित करता हूं तो मुझे 'page.php' मिलता है। दो अलग-अलग विषयों पर परीक्षण किया गया। – kapser

3

तो अपने विशिष्ट समस्या मुख पृष्ठ के साथ है, तो आप get_page_template() के संयोजन का उपयोग और (WordPress option reference देखें) get_option('page_on_front') साथ संपादित पृष्ठ की आईडी की तुलना कर सकते हैं। एक विकल्प भी है, show_on_front, जो इंगित करता है कि फ्रंट पेज पोस्ट या स्थिर पृष्ठ दिखाता है या नहीं।

शायद यह मदद करता है? मुझे नहीं पता कि क्या अन्य किनारे के मामले हैं जहां एक अलग टेम्पलेट का उपयोग किया जाएगा ...

+0

धन्यवाद, यह वास्तव में सामने वाले पृष्ठ के लिए मदद करेगा। दुर्भाग्यवश मैं सभी [टेम्पलेट पदानुक्रम] (https://developer.wordpress.org/themes/basics/template-hierarchy/) मामलों के किनारे के मामलों पर विचार करता हूं, जो बहुत अधिक हैं। जैसा कि मैं एक प्लगइन लिख रहा हूं जो विभिन्न विषयों के लिए काम करना चाहिए, मैं केवल कुछ किनारों के मामलों को शामिल नहीं कर सकता हूं। – kapser

+0

हां, आप संभावित रूप से संभावित टेम्पलेट फ़ाइलों की उपस्थिति की जांच कर सकते हैं, एक-एक करके, बच्चे विषयों आदि को खाते में ले जा सकते हैं ... ऐसा लगता है जैसे यह बहुत तेज़ हो जाएगा, कर्ल के साथ आपका हैक शायद अधिक व्यावहारिक समाधान! – klumme

संबंधित मुद्दे