รหัสย่อจะแสดงที่ด้านบนของหน้าเสมอ


15

ฉันใช้รหัสย่อเพื่อดึงลูปต่าง ๆ ผ่านลูป - ชื่อ.php ด้วยเหตุผลบางอย่างมันอยู่ด้านบนของหน้าเสมอ ฉัน googled มันและใช้ echo แทนการส่งคืนทำให้เกิดปัญหานั้น แต่ด้วยรหัสของฉันฉันไม่ได้ใช้ echo นี่คือรหัสย่อ:

// 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'));
 }

มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?


ย่อสำหรับการรวมไฟล์หรือไม่? ฉันคิดว่ามันแปลก ๆ
Rutwick Gangurde

1
'ด้วยรหัสของฉันฉันไม่ได้ใช้ echo' - ไฟล์loop-module.php เป็นเสียงสะท้อนหรือส่งคืนเอาต์พุตหรือไม่?
ไมเคิล

ไม่ใช่ในขณะนี้ - ไฟล์เพิ่งมีแท็กวรรคที่มีคำว่า "test" เขียนไว้เพื่อที่ฉันจะได้เห็นวิธีการทำงาน
john joe

ใช้get_template_part('loop',$module)แทนมันสวยรวดเร็วในการพิมพ์รูปแบบการสนับสนุนแม่ / ลูกและเป็นวิธีการที่แนะนำรวมทั้งแม่แบบใน WordPress (ใช่ locate_template อาจทำบางสิ่งเหล่านั้น แต่ดูวิธีการมากที่สามารถอ่านได้น้อยมันเป็น!)
ทอม J Nowell

คำตอบ:


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' );
}


ฉันกลัวว่าไม่ได้ผล
john joe

เกิดอะไรขึ้น ฉันพยายามและปรับปรุงคำตอบ
offroff

8

ไฟล์ที่คุณรวมมานั้นเป็น echo-ing HTML ตัวอย่างเช่น

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

เป็นเช่นเดียวกับ

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

ทั้งสองพิมพ์ทันทีแทนที่จะส่งคืน ตั้งแต่พิมพ์มันจะปรากฏก่อนเนื้อหาของหน้า คุณต้องส่งคืนบางสิ่งเพื่อรวมไว้ในเนื้อหา

@RutwickGangurde ชี้ให้เห็น - เป็นเรื่องผิดปกติที่จะรวมไฟล์เทมเพลตไว้ในรหัสย่อ


1
ขอบคุณฉันไม่รู้ ดังนั้นฉันต้องใส่ทุกอย่างลงในตัวแปรแล้วส่งคืนหรือไม่ สำหรับการรวมไฟล์เทมเพลต - ฉันต้องการทำให้ผู้ใช้ธีมง่ายที่สุดเท่าที่จะเป็นไปได้เพื่อปรับแต่งธีมและการมีไฟล์รหัสย่อขนาดใหญ่ซ้อนกันอยู่ห่างจากรูทธีม dir ไม่เหมาะสำหรับพวกเขา
john joe

ดูคำตอบของ @ offroff - น่าจะใช้ได้
Stephen Harris

1
" ดีฉันต้องการทำให้เป็นเรื่องง่ายที่สุดสำหรับผู้ใช้ชุดรูปแบบในการปรับแต่งชุดรูปแบบ " - จำเป็นต้องมีเลเยอร์นามธรรมจำนวนเท่าใด คุณมีไฟล์เทมเพลตที่กำหนดเองอยู่ในรหัสย่อ ฉันไม่เห็นวิธีการที่ทำให้ผู้ใช้ง่ายขึ้น หากคุณต้องการให้ความสามารถในการเพิ่มเนื้อหาแบบคงที่ให้กับโพสต์ทั้งหมดเพียงแค่กำหนดdynamic_sidebar()วงในและให้ผู้ใช้เพิ่มวิดเจ็ต
Chip Bennett

ผู้ใช้ชุดรูปแบบส่วนใหญ่จะไม่ซาบซึ้งที่ต้องอวนลากผ่านไฟล์รหัสย่อขนาดใหญ่เพื่อเปลี่ยนคลาส css แบบง่าย ๆ ที่ส่วนหน้า ถ้าฉันเลิกทุกอย่างโดยใช้ระบบ loop-name.php มาตรฐานแล้วมันเร็วกว่ามากสำหรับพวกเขาในการค้นหาสิ่งที่ต้องการ ไม่เหมาะ แต่ฉันต้องทำให้พวกเขามีความสุข;)
john joe

อธิบายได้ดีมาก
Diego Somar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.