शॉर्टकोड, अप्रत्याशित परिणाम के अंदर टेम्पलेट भाग
मैं एक शोर्ट के माध्यम से एक टेम्पलेट भाग को कॉल करने का प्रयास कर रहा हूं। Ive ने इस साइट पर बार-बार यह कैसे करना है, इसके बारे में पढ़ा और फिर भी कई चीजों की कोशिश करने के बाद भी एक साधारण php इको टाइम स्ट्रिंग को कॉल करने में असमर्थ है। फ़ाइल का नाम परीक्षण-one.php है। मैंने जो कोशिश की है, वह है:
function test_2( $attr ) {
ob_start();
get_template_part( 'test', 'one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'wp-content/themes/theme-name/template-parts/test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
टेम्पलेट भाग कोड है
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
लगता है जैसे यह काम करना चाहिए, नहीं? मुझसे कहां गलती हो रही है?
जवाब
get_template_part()
समारोह किसी भी निर्देशिका का नाम स्वीकार नही करता, आप स्पष्ट रूप से यह आपूर्ति करने के लिए किया है। यह सक्रिय थीम डायरेक्टरी के सापेक्ष भी है। तो आपके कई उदाहरणों में यह आपके सक्रिय विषय की जड़ में टेम्पलेट की तलाश में था। सही प्रारूप होगा:
get_template_part( 'template-parts/test-one' );
यदि आप चाहते थे, तो आप फ़ोल्डर का नाम बदल सकते हैं inc
या includes
- यह मनमाना है। आपको फ़ंक्शन कॉल में इस परिवर्तन को प्रतिबिंबित करने की आवश्यकता है।
एक साइड नोट पर, वर्डप्रेस आपको दूसरा पैरामीटर पास करने की अनुमति देता है और डैश द्वारा शामिल की गई फ़ाइलों की तलाश करेगा। उदाहरण के लिए, यह भी काम करेगा:
get_template_part( 'template-parts/test', 'one' );
इसका लाभ यह है कि आप एक विशिष्ट भाग के कई "प्रकार" के लिए अनुमति देता है। आपके पास content-post.php
अपनी पोस्ट सामग्री को आउटपुट करने के लिए एक फ़ाइल हो सकती है और content-page.php
अपने पेज की सामग्री को आउटपुट करने के लिए। तब आपके थीम में आप अपने टेम्पलेट को कॉल कर सकते हैं:
get_template_part( 'template-parts/content', $post->post_type );
बस इसे थोड़ा और गतिशील बनाने की अनुमति देता है।
एक और साइड नोट। किसी भी समय आपको इन प्रकार के कार्यों से परेशानी होती है, जिनका आप हमेशा उपयोग कर सकते हैं:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
यह आउटपुट करेगा टेम्पलेट पथ WordPress द्वारा टेम्पलेट तक पहुंचने का प्रयास कर रहा है।