शॉर्टकोड हमेशा पृष्ठ के शीर्ष पर प्रदर्शित होता है


15

मैं छोरों-name.php के माध्यम से विभिन्न छोरों में खींचने के लिए एक शोर्ट का उपयोग कर रहा हूं। किसी कारण से यह हमेशा पृष्ठ के शीर्ष पर होता है। मैंने इसे देखा और वापसी के बजाय प्रतिध्वनि का उपयोग करने से उस समस्या का कारण बनता है लेकिन अपने कोड के साथ मैं प्रतिध्वनि का उपयोग नहीं कर रहा हूं। यहाँ शोर्ट है:

// setup the shortcode for use
function friendly_loop_shortcode( $atts, $content = null ) {
extract( shortcode_atts( array(
'category' => '',
'module' => ''
), $atts ) );

include(locate_template('loop-'.$module.'.php'));
 }

कुछ पता है कि ऐसा क्यों हो रहा है?


एक फाइल शामिल करने के लिए शोर्ट? मुझे यह थोड़ा अजीब लगता है।
रुटविक गांगुर्ड

1
'अपने कोड के साथ मैं इको का उपयोग नहीं कर रहा हूं' - लूप-मॉड्यूल हैं। एफपी फाइलें गूंज रही हैं या उनका आउटपुट वापस आ रहा है?
माइकल

फिलहाल नहीं - फ़ाइल में एक पैराग्राफ टैग है जिसमें "परीक्षण" लिखा है, इसलिए मैं देख सकता हूं कि यह कैसे काम करता है।
जॉन जो

get_template_part('loop',$module)इसके बजाय, इसका उपयोग करने के लिए त्वरित, टाइप करने के लिए तेज, माता-पिता / बच्चे के विषयों का समर्थन करता है, और यह वर्डप्रेस में टेम्प्लेट शामिल करने की अनुशंसित विधि है (हाँ find_template उन चीजों में से कुछ कर सकता है, लेकिन देखो यह कितना कम पठनीय है!)
टॉम नोवेल

जवाबों:


16

आप आउटपुट को इस तरह से बफर कर सकते हैं:

ob_start();
include(locate_template('loop-'.$module.'.php'));
return ob_get_clean();

संपादित करें। मैंने यह कोशिश की, ठीक काम किया।

function friendly_loop_shortcode( $atts, $content = null ) {
     extract( shortcode_atts( array(
         'category' => '',
         'module' => ''
     ), $atts ) );

     ob_start();
     include(locate_template('loop-'.$module.'.php'));
     $output = ob_get_clean();
     //print $output; // debug
     return $output;
}

if (!is_admin()) {
     add_shortcode('test', 'friendly_loop_shortcode' );
}

4
यदि अन्य तरीके हैं तो आउटपुट बफ़रिंग का उपयोग न करें
FUXIA

मुझे डर है कि काम नहीं किया
जॉन जो

क्या गलत हुआ? मैंने उत्तर की कोशिश की और अद्यतन किया
7

8

आपकी सम्मिलित फ़ाइल अनिवार्य रूप से प्रतिध्वनि-HTML है। उदाहरण के लिए

<?php
 //Some PHP
 echo 'test';
 //Some more PHP
 ?>

के समान है

<?php
 //Some PHP 
 ?>
 test
<?php
 //Some more PHP
 ?>

दोनों वापस लौटने के बजाय तुरंत छप जाते हैं। इसके प्रिंट होने के बाद से यह पेज कंटेंट के सामने आता है। सामग्री में शामिल होने के लिए आपको कुछ वापस करने की आवश्यकता है।

जैसा कि @RutwickGangurde ने बताया - शार्टकोड में टेम्प्लेट फ़ाइल को शामिल करना असामान्य है।


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

@ ऑफ्रॉफ का उत्तर देखें - जो काम करना चाहिए
स्टीफन हैरिस

1
" अच्छी तरह से मैं थीम उपयोगकर्ताओं को विषय को अनुकूलित करने के लिए जितना संभव हो उतना आसान बनाना चाहता हूं " - बस कितने अमूर्त परतें आवश्यक हैं? आपको शोर्ट के अंदर एक कस्टम टेम्पलेट फ़ाइल मिली है। मैं यह नहीं देखता कि यह कैसे उपयोगकर्ताओं के लिए चीजों को आसान बनाता है। यदि आप सभी पोस्ट में स्थिर सामग्री जोड़ने की क्षमता प्रदान करना चाहते हैं, तो बस dynamic_sidebar()लूप के अंदर परिभाषित करें , और उपयोगकर्ताओं को विजेट जोड़ने दें।
चिप बेनेट

ज़्यादातर थीम उपयोगकर्ता फ्रंटएंड पर एक साधारण सीएसएस क्लास बदलने के लिए बड़े पैमाने पर शोर्ट फ़ाइल के माध्यम से ट्रॉल होने की सराहना नहीं करेंगे। अगर मैं मानक पाश-name.php सिस्टम का उपयोग करके सब कुछ तोड़ देता हूं, तो यह उनके लिए बहुत तेज़ है कि उन्हें क्या चाहिए। आदर्श नहीं है, लेकिन मुझे उन्हें खुश रखने के लिए मिला है;)
जॉन जो

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