आपको यह कैसे पता चलेगा कि कौन सा टेम्पलेट पृष्ठ वर्तमान पृष्ठ परोस रहा है?


54

जब आप किसी वर्डप्रेस थीम को सक्रिय करते हैं, तो यह पता लगाना हमेशा मुश्किल होता है कि चीजों को बदलने के लिए किस फाइल पर जाना है। किसी भी विचार कैसे चीजों को सरल बनाने के लिए?

लेकिन दूसरी तरफ, get_template_part की कार्यक्षमता को देखते हुए, यह असंभव हो सकता है। क्यों भाई क्या कहते हो?


1
मैं html का निरीक्षण करता हूं और एक पहचाना हुआ टैग या कुछ अद्वितीय खोजता हूं।
नौइसे गोल्डन

1
स्रोत कोड देखें और निकाय कक्षाओं के लिए देखें जो आपको बताते हैं कि किस टेम्पलेट का उपयोग किया गया है। साथ ही आपको आईडी देता है
ब्रैड डाल्टन


@ ब्रैडाल्टन +1। विशेष रूप से जब हमें एक प्लगइन स्थापित करने या लक्ष्य प्राप्त करने के लिए फ़ंक्शन लिखने की अनुमति नहीं है।
सुब्रत सरकार

जवाबों:


34

हुक पर template_include, विषय द्वारा निर्धारित टेम्प्लेट को नोट करने के लिए एक वैश्विक सेट करें फिर उस मान को पाद लेख या शीर्ष लेख में देखें कि कौन सा टेम्पलेट किसी दिए गए दृश्य के लिए कहा जा रहा है।

मैंने वर्तमान टेम्पलेट फ़ाइल के नाम में पहले इस फ़िल्टर हुक के बारे में बात की थी , लेकिन उस कोड की एक प्रति ले लो और इसे अपने विषय की functions.phpफ़ाइल को डुबो दो ।

फिर थीम के header.phpया footer.php(या जहाँ भी आप चाहें) को खोलें और वर्तमान टेम्पलेट को प्रिंट करने के लिए निम्न जैसे कुछ का उपयोग करें।

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

यदि आप इसे किसी उत्पादन साइट पर उपयोग करना चाहते हैं और उस जानकारी को अपने गैर-व्यवस्थापक उपयोगकर्ताओं से दूर रखना चाहते हैं, तो थोड़ा सशर्त तर्क जोड़ें।

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

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


1
यदि इस उत्तर में कुछ गड़बड़ है, या यदि कोई व्यक्ति इस उत्तर को बेहतर बनाने के लिए क्या किया जा सकता है, उस पर टिप्पणी प्रदान कर सकता है, तो उस पर एक टिप्पणी छोड़ें और अपने विचारों और विचारों को बेहतर बनाने के बारे में साझा करें।
t31os

1
यह काम नहीं किया भाई, यह कहते हैं "अपरिभाषित समारोह"
Lucas Bustamante

1
@ LucasB यहाँ भी, यही त्रुटि मुझे मिली है
लिंकन बर्गेसन


40

ठीक है, अगर आप चाहते हैं कि वर्तमान पृष्ठ को उत्पन्न करने के लिए कौन सी टेम्पलेट फ़ाइल का उपयोग किया गया है, तो आपको कोड के साथ अपने गंदे को गंदा करने की आवश्यकता नहीं है;)

इस आसान प्लगइन को डिबग बार कहा जाता है । यह तुम्हारी सहित कई स्थितियों में एक महान सहायक है। आपको निश्चित रूप से इसे देखना चाहिए - मेरे लिए और कई अन्य लोगों के लिए यह किसी भी WP विकास के लिए एक साथी होना चाहिए।

मैंने एक स्क्रीनशॉट संलग्न किया है जो आपको प्यार में पड़ सकता है ...

यहाँ छवि विवरण दर्ज करें

डिबग बार को काम करने के लिए , आपको सक्षम करने wp_debugऔर wp_savequeriesविकल्पों की आवश्यकता है । ये विकल्प डिफ़ॉल्ट रूप से अक्षम अवस्था में हैं।

इससे पहले कि आप कोई बदलाव करें, लेकिन ध्यान में रखने के लिए कुछ बिंदु हैं:

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

परिवर्तन करने के लिए:

  1. wp_config.phpएक ftp क्लाइंट के माध्यम से फ़ाइल खोलें ।
  2. wp_debugविकल्प के लिए खोजें । इसे संपादित करें define( 'WP_DEBUG', true );। यदि लाइन मौजूद नहीं है, तो इसे फ़ाइल में जोड़ें।
  3. इसी तरह, लाइन define( 'SAVEQUERIES', true );को फाइल में एडिट या एड करें ।
  4. सहेजें। आप डीबग करने के लिए तैयार हैं।

अधिक जानकारी: कोडेक्स


2
@justCallMeBiru - डिबग बार प्लगइन की आवश्यकता नहीं हैWP_DEBUG और SAVEQUERIES, हालांकि यह उनके द्वारा बढ़ाया गया है।
पैट जे

3
इस तरह के प्लगइन को चलाने पर, केवल एक सूचना के लिए एक बिट बिट ओवरहेड इमो का निर्माण करता है, और इस प्रकार मैंने इसे अपने उत्तर में नहीं सुझाया। उस ने कहा, स्पष्ट रूप से लोग इस जवाब को पसंद करते हैं, मैं यह जानने के लिए उत्सुक हूं कि हालांकि।
t31os

23

मैं इस आसान फ़ंक्शन का उपयोग करता हूं जो केवल सुपर एडिंस के लिए वर्तमान टेम्पलेट प्रदर्शित करता है:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

उम्मीद है की वो मदद करदे। :)


2
यह गोटो उत्तर है, स्वीकार किया जाना चाहिए।
हाइब्रिड वेब देव

12

प्रत्येक प्रासंगिक टेम्पलेट फ़ाइल में get_header लाइन के ठीक बाद निम्न कोड जोड़ें:

<!-- <?php echo basename( __FILE__ ); ?> -->

आपके ब्राउज़र में> स्रोत देखें, और टेम्पलेट नाम आपके HTML कोड में एक टिप्पणी के रूप में प्रदर्शित किया जाएगा

<!-- page.php -->

इसे हर जगह जोड़ने का बहुत अधिक प्रयास है
Adal

4

सबसे आसान तरीका जो मैंने पाया है वह है बॉडी टैग पर वर्डप्रेस फंक्शन को शामिल करना। यह आपके द्वारा देखे जाने वाले पृष्ठ (सामने वाले के लिए घर, पृष्ठ के लिए पृष्ठ आदि) के आधार पर कई कक्षाएं जोड़ देगा।

इसे यहां देखें: http://codex.wordpress.org/Function_Reference/body_class

इसके अलावा यह उन पृष्ठों पर सीएसएस के साथ तत्वों को लक्षित करने के लिए सहायक है।

जैसा कि डेविड आर ने उल्लेख किया है, टेम्पलेट टेम्पलेट पदानुक्रम (http://codex.wordpress.org/Template_Hierarchy) को जानना भी एक अच्छा विचार है।


4

इस उद्देश्य के लिए विशेष रूप से एक और नंगे-हड्डियों का प्लगइन है। मैं डिबग बार को स्थापित करने की दिशा में झुकाव कर रहा हूं, क्योंकि वे अन्य विशेषताएं उपयोगी दिखती हैं, लेकिन यह एक अधिक बुनियादी और विशेष रूप से इस उद्देश्य के लिए है: http://wordpress.org/extend/plugins/what-the-file/


3

एक बहुत ही सरल बात मैं विषय की प्रत्येक प्रासंगिक फ़ाइल में टेम्पलेट फ़ाइल की पहचान करने वाली एक HTML टिप्पणी सम्मिलित करना है, उदाहरण के लिए index.php के शीर्ष पर

<!-- index -->

और फ्रंट पेज के शीर्ष पर

<!-- front -->

लेकिन जाहिर है कि विषय को संशोधित करने की आवश्यकता है। मुझे संदेह है कि आप footer.php फ़ाइल या शीर्ष लेख में एक कस्टम फ़ंक्शन जोड़ सकते हैं। ऐसा करने से आपको पता चलेगा कि किस फ़ाइल का उपयोग किया जा रहा था। उपरोक्त विधि और संदर्भ चार्ट http://codex.wordpress.org/Template_Hierarchy मैं उपयोग करने के लिए क्या कर रहा हूँ।


3

थीम चेक नाम का एक प्लगइन है जो ठीक यही करता है। यह एक HTML टिप्पणी के रूप में उपयोग में वर्तमान टेम्पलेट फ़ाइल का नाम प्रदर्शित करता है।


3

हेयर यू गो:

वर्तमान लैंडिंग पृष्ठ के लिए उपयोग में आने वाली सभी टेम्प्लेट फ़ाइलों के साथ एक HTML-सूची , जिसमें प्लगइन्स, चाइल्ड थीम और / या पेरेंट थीम कॉम्बिनेशन के सभी टेम्पलेट-पार्ट्स शामिल हैं , सभी कोड की एक पंक्ति में हैं:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

आपको यह जांचने की आवश्यकता है कि आपका सर्वर किसी भी मार्ग पर डब्बा स्लैश वापस नहीं कर रहा है । इसे सभी टेम्पलेट फ़ाइलों के बाद उपयोग करने के लिए याद रखें, जैसे कि footer.php, लेकिन व्यवस्थापक बार रेंडर करने से पहले

यदि admin-bar stuffपथ शीर्ष पर, या किसी अन्य फ़ाइल में दिखाई दे रहा है, तो फ़ाइल नाम template-loader.phpको कोड की इस पंक्ति में बदल दें: जो भी फ़ाइलनाम आपको तोड़ने की आवश्यकता है। अक्सर:class-wp-admin-bar.php

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

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

प्राथमिकता -5यह सुनिश्चित करती है कि यह पहले लोड हो जाए। कुंजी को get_included_files()सही समय पर कॉल करना है , अन्यथा कुछ सरणी-पॉपिंग की आवश्यकता है!

इसे तोड़ने के लिए:

आप PHP backtrace के बिना सभी शामिल टेम्पलेट फ़ाइलों को इकट्ठा नहीं कर सकतेSuperglobals template_include अभ्यस्त के भीतर उन सभी को इकट्ठा । दूसरा तरीका प्रत्येक टेम्प्लेट फ़ाइल में "एक मार्कर रखना" है, लेकिन अगर आपको पहले फ़ाइलों के साथ बातचीत करने की आवश्यकता है, तो आप समय और पूरे विचार के साथ तालमेल बिठाते हैं।

1) हमें वर्तमान वर्डप्रेस अनुरोध द्वारा उपयोग की जाने वाली सभी फ़ाइलों के अंदर की जांच करने की आवश्यकता है। और वे कई हैं! यदि आप 300 फ़ाइल का उपयोग कर रहे हैं, तो इससे पहले कि आपके फंक्शंस पंजीकृत न हों, तो आश्चर्य न करें।

$included_files = str_replace('\\', '/', get_included_files());

हम PHP देशी get_included_files () का उपयोग कर रहे हैं, पीछे के स्लैश को वर्डप्रेस के अधिकांश रास्तों से मिलान करने के लिए आगे स्लैश में परिवर्तित कर रहे हैं।

2) हम उस ऐरे को काट रहे हैं जहाँ से टेम्प्लेट-लोडर.फपी पंजीकृत है। उसके बाद, पॉप्युलेटेड get_included_files () में केवल टेम्प्लेट फाइल पॉप्युलेट होनी चाहिए।

/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) परिणामों को कम करें, हमें विषय फ़ोल्डर या प्लगइन फ़ोल्डर तक पथ की आवश्यकता नहीं है, उपयोग में टेम्पलेट्स के रूप में, प्लगइन्स, थीम या चाइल्ड थीम फ़ोल्डर्स से मिश्रित किया जा सकता है

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) अंत में, सरणी से एक अच्छी HTML सूची में परिवर्तित करें

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

एक अंतिम संशोधन part3 में आवश्यक हो सकता है ) -replacement , यदि आप आवश्यक नहीं है प्लगइन्स द्वारा शामिल करना चाहते हैं । वे class-filesटेम्पलेट आउटपुट प्रोसेसिंग के दौरान देर से, और "इंटरसेप्ट" कह सकते हैं ।

हालाँकि, मैंने उन्हें दृश्यमान छोड़ना उचित समझा, क्योंकि विचार व्हाट्सएप को ट्रैक करने के लिए है , भले ही यह "टेम्पलेट" न हो, जो इस चरण में आउटपुट प्रदान करता है।

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