2012-09-07 4 views
9

मेरे पास एक ऐसा पृष्ठ है जहां मुझे उपयोगकर्ता को पाठ का अनुच्छेद दर्ज करने की अनुमति देने की आवश्यकता है। फिर उस पाठ के बाद, एक शोर्ट डालें जो पोस्ट की एक सूची प्रस्तुत करेगा, उसके बाद उसके बाद अधिक मुक्त-फॉर्म टेक्स्ट जोड़ें। मेरा विचार था कि वे एक शोर्ट डालने में सक्षम होना चाहिए जो पदों को आउटपुट करेगा। इस तरह वे आसानी से शोर्ट जोड़ सकते हैं जहां वे पोस्ट दिखाना चाहते हैं।कॉलिंग वर्डप्रेस get_template_part को शॉर्टकोड फ़ंक्शन के अंदर से पहले टेम्पलेट प्रस्तुत करता है

मेरे पास वर्तमान में तर्क है जो अपनी फ़ाइल में अलग-अलग पोस्ट को पुनर्प्राप्त करता है।

add_shortcode('donation-posts', 'fnDonatePosts'); 
function fnDonatePosts($attr, $content) 
{ 
    get_template_part('donation', 'posts');  
} 
: शोर्ट बनाने के लिए

get_template_part('donation', 'posts'); 

मैं क्रम में मेरी functions.php फाइल में कैसे एक शोर्ट बनाने के लिए में देखा है और निम्नलिखित कोड शामिल: वर्तमान में मैं बस get_template_part() फ़ंक्शन का उपयोग करके एक पेज में शामिल

donation-posts.php ठीक तरह से निष्पादित किया जा रहा है और पोस्ट दिखाई दे रहे हैं, हालांकि, वे सामग्री से पहले हमेशा स्थित हैं, न कि शोर्ट को उस स्थान पर रखा गया था।

मैंने get_template_part() फ़ंक्शन को निकालने का प्रयास किया है और बस कुछ टेक्स्ट आउटपुट किया है और यह ठीक काम करता है। तो मैं समझता हूं कि get_template_part() ऐसा करने का सही तरीका नहीं हो सकता है, हालांकि, मैं ऐसा करने का प्रयास करने में सक्षम नहीं हूं जो मैं करने का प्रयास कर रहा हूं (मुझे यकीन है कि एक रास्ता है ... मैं बस हेवन यह नहीं मिला)।

मैं कोशिश की है:

include(get_template_directory(). '/donation-posts.php'); 
include_once(get_template_directory(). '/donation-posts.php') : 

लेकिन इन प्रसंस्करण बंद कर दिया एक बार वे शामिल फ़ाइल में PHP कोड मारा।

मैं भी कोशिश की है:

$file = file_get_contents(get_template_directory(). '/donation-posts.php'); 
     return $file; 

लेकिन यह केवल फ़ाइल की सामग्री देता है (जैसा कि नाम से पता चलता समारोह) जिसका मतलब है कि यह PHP स्क्रिप्ट निष्पादित नहीं करता पदों वापस जाने के लिए।

कोई भी इससे पहले ऐसा करता है? क्योंकि get_template_part मूल रूप से PHP'srequire तरह से प्रतिक्रिया करता है

उत्तर

18

आप इस कोशिश कर सकते हैं, यह आपकी समस्या का समाधान हो सकता है, यह वापस नहीं करता है, लेकिन सामग्री तुरंत जहां यह कहा जाता रहा है echos।

add_shortcode('donation-posts', 'fnDonatePosts'); 
function fnDonatePosts($attr, $content) 
{   
    ob_start(); 
    get_template_part('donation', 'posts'); 
    $ret = ob_get_contents(); 
    ob_end_clean(); 
    return $ret;  
} 
+0

क्षमा करें यह इतना समय लगा मुझे प्रतिक्रिया देने के लिए लेकिन मैं अपने प्लेट पर परियोजनाओं के टन havea और यह एक समर्थक बोनो परियोजना इसलिए प्राथमिकताओं में तदनुसार बैठता है। वैसे भी, आपका फिक्स बस मुझे चाहिए था! धन्यवाद! –

+0

आपका स्वागत है :-) –

+1

यह इतना बदसूरत समाधान है लेकिन यह सबसे अच्छा (केवल?) एक है। – Stefan

7

यहाँ आप टेम्पलेट के लिए पथ पारित कर सकते हैं एक और अधिक गतिशील संस्करण है।

function template_part($atts, $content = null){ 
    $tp_atts = shortcode_atts(array( 
     'path' => null, 
    ), $atts);   
    ob_start(); 
    get_template_part($tp_atts['path']); 
    $ret = ob_get_contents(); 
    ob_end_clean(); 
    return $ret;  
} 
add_shortcode('template_part', 'template_part'); 

और शोर्ट:

[template_part path="includes/social-sharing"] 
+0

शानदार, एसओ के बावजूद मुझे यह बता रहा है कि टिप्पणियां * धन्यवाद * वाक्यांशों के लिए यहां नहीं हैं, मैं केवल इतना कह सकता हूं, धन्यवाद, महान मॉड्यूलरिटी! – Luis

1

स्वीकार किए जाते हैं जवाब का कम से कम संस्करण:

function my_template_part_shortcode() { 
    ob_start(); 
    get_template_part('my_template'); 
    return ob_get_clean(); 
} 
add_shortcode('my_template_part', 'my_template_part_shortcode'); 

जहां my-template.php फ़ाइल आप शामिल करना चाहते हैं।

1

get_template_part() function.php में इसका उपयोग करते समय मेरे लिए काम नहीं किया। मैंने ob_start के अंदर explore_template() का उपयोग किया और इसके बजाय साफ किया।उदाहरण के लिए:

function full_petition_shortcode($attr) { 
    ob_start(); 
    locate_template('petition.php', TRUE, TRUE); 

    return ob_get_clean(); 
} 
add_shortcode('full-petition', 'full_petition_shortcode'); 
संबंधित मुद्दे