शॉर्टकोड, अप्रत्याशित परिणाम के अंदर टेम्पलेट भाग

Aug 16 2020

मैं एक शोर्ट के माध्यम से एक टेम्पलेट भाग को कॉल करने का प्रयास कर रहा हूं। 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");

लगता है जैसे यह काम करना चाहिए, नहीं? मुझसे कहां गलती हो रही है?

जवाब

2 Howdy_McGee Aug 17 2020 at 00:25

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 द्वारा टेम्पलेट तक पहुंचने का प्रयास कर रहा है।