เมื่อคุณเปิดใช้งานชุดรูปแบบ wordpress มันเป็นเรื่องยุ่งยากเสมอที่จะค้นหาไฟล์ที่จะเปลี่ยนสิ่งต่าง ๆ มีความคิดใดที่จะทำให้สิ่งต่าง ๆ ง่ายขึ้น?
แต่ในทางกลับกันเมื่อพิจารณาถึงฟังก์ชั่น get_template_part สิ่งนี้อาจเป็นไปไม่ได้ พูดว่าอะไรนะ?
เมื่อคุณเปิดใช้งานชุดรูปแบบ wordpress มันเป็นเรื่องยุ่งยากเสมอที่จะค้นหาไฟล์ที่จะเปลี่ยนสิ่งต่าง ๆ มีความคิดใดที่จะทำให้สิ่งต่าง ๆ ง่ายขึ้น?
แต่ในทางกลับกันเมื่อพิจารณาถึงฟังก์ชั่น get_template_part สิ่งนี้อาจเป็นไปไม่ได้ พูดว่าอะไรนะ?
คำตอบ:
ขอtemplate_include
ให้ตั้งค่าโกลบอลเพื่อจดบันทึกเทมเพลตที่ตั้งค่าโดยธีมจากนั้นอ่านค่านั้นกลับเข้าไปในส่วนท้ายหรือส่วนหัวเพื่อดูว่าเทมเพลตใดที่ถูกเรียกใช้สำหรับมุมมองที่กำหนด
ฉันพูดเกี่ยวกับตัวกรองนี้ก่อนในรับชื่อของไฟล์เทมเพลตปัจจุบันแต่ไปคว้าสำเนาของรหัสนั้นและใช้functions.php
ไฟล์ธีมของคุณ
จากนั้นเปิดชุดรูปแบบheader.php
หรือfooter.php
(หรือที่ใดก็ได้ที่คุณต้องการ) และใช้สิ่งต่อไปนี้เพื่อพิมพ์แม่แบบปัจจุบัน
<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>
หากคุณต้องการใช้สิ่งนี้ในไซต์ที่ใช้งานจริงและเก็บข้อมูลนั้นไว้ห่างจากผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบของคุณให้เพิ่มตรรกะตามเงื่อนไขเล็กน้อย
<?php
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) )
// Print the saved global
printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() );
?>
ตอนนี้คุณสามารถติดตามมุมมองที่ใช้เทมเพลตใดในขณะที่เก็บข้อมูลนั้นไว้ห่างจากผู้เข้าชมของคุณ
get_page_template
ถ้าทั้งหมดที่คุณต้องการคือการตรวจสอบไฟล์เทมเพลตที่ใช้ในการสร้างหน้าปัจจุบันจากนั้นคุณไม่จำเป็นต้องทำให้โค้ดสกปรก;
มีปลั๊กอินที่มีประโยชน์นี้เรียกว่าเป็นDebug บาร์ มันเป็นตัวช่วยที่ยอดเยี่ยมในหลาย ๆ สถานการณ์รวมถึงตัวคุณด้วย คุณควรตรวจสอบแน่นอน - สำหรับฉันและคนอื่น ๆ มันเป็นคู่หูที่ต้องมีสำหรับการพัฒนา WP
ฉันได้แนบภาพหน้าจอที่อาจทำให้คุณตกหลุมรัก ...
ในการทำให้ Debug Bar ทำงานคุณต้องเปิดใช้งานwp_debug
และwp_savequeries
ตัวเลือกต่างๆ ตัวเลือกเหล่านี้อยู่ในสถานะปิดใช้งานโดยค่าเริ่มต้น
ก่อนที่คุณจะทำการเปลี่ยนแปลงใด ๆ คุณควรคำนึงถึงประเด็นต่อไปนี้:
วิธีทำการเปลี่ยนแปลง:
wp_config.php
ไฟล์ผ่านไคลเอนต์ ftpwp_debug
ตัวเลือก define( 'WP_DEBUG', true );
แก้ไขมัน หากไม่มีบรรทัดให้เพิ่มลงในไฟล์define( 'SAVEQUERIES', true );
ลงในไฟล์ข้อมูลเพิ่มเติม: Codex
WP_DEBUG
และSAVEQUERIES
แม้ว่าพวกเขาจะได้รับการปรับปรุง
ฉันใช้ฟังก์ชั่นที่ใช้งานง่ายนี้ซึ่งจะแสดงเทมเพลตปัจจุบันสำหรับผู้ดูแลระดับสูงเท่านั้น:
function show_template() {
if( is_super_admin() ){
global $template;
print_r($template);
}
}
add_action('wp_footer', 'show_template');
หวังว่าจะช่วย :)
เพิ่มรหัสต่อไปนี้ทันทีหลังบรรทัด get_header ในแต่ละไฟล์เทมเพลตที่เกี่ยวข้อง:
<!-- <?php echo basename( __FILE__ ); ?> -->
ในเบราว์เซอร์ของคุณ> ดูแหล่งที่มาและชื่อเทมเพลตจะแสดงเป็นความคิดเห็นในรหัส html ของคุณเช่น
<!-- page.php -->
วิธีที่ง่ายที่สุดที่ฉันพบคือการรวมฟังก์ชั่น WordPress ไว้ในแท็ก body มันจะเพิ่มหลายคลาสขึ้นอยู่กับหน้าที่คุณกำลังดู (หน้าแรกสำหรับหน้า, หน้าสำหรับหน้า ฯลฯ )
ลองใช้งานได้ที่นี่: http://codex.wordpress.org/Function_Reference/body_class
นอกจากนี้ยังมีประโยชน์สำหรับองค์ประกอบการกำหนดเป้าหมายด้วย CSS ในหน้าเหล่านั้น
ทำความรู้จักกับเทมเพลตลำดับชั้น (http://codex.wordpress.org/Template_Hierarchy) ตามที่ David R พูดถึงเป็นความคิดที่ดีเช่นกัน
มีปลั๊กอินอีกอันที่เปลือยเปล่าสำหรับจุดประสงค์นี้โดยเฉพาะ ฉันโน้มตัวไปสู่การติดตั้งแถบแก้ปัญหาเพราะคุณสมบัติอื่น ๆ เหล่านั้นดูมีประโยชน์ แต่อันนี้เป็นพื้นฐานและมีความเฉพาะเจาะจงมากขึ้นสำหรับวัตถุประสงค์นี้: http://wordpress.org/extend/plugins/what-the-file/
สิ่งหนึ่งที่ง่ายมากที่ฉันทำได้คือการแทรกความคิดเห็น HTML ที่ระบุไฟล์แม่แบบในแต่ละไฟล์ที่เกี่ยวข้องของชุดรูปแบบเช่นที่ด้านบนของ index.php ฉันมี
<!-- index -->
และที่ด้านบนของ front-page.php
<!-- front -->
แต่เห็นได้ชัดว่าต้องแก้ไขธีม ฉันสงสัยว่าคุณสามารถเพิ่มฟังก์ชั่นที่กำหนดเองในไฟล์ footer.php หรือ header.php ซึ่งจะบอกคุณว่าไฟล์ใดถูกใช้ เมธอดด้านบนและแผนภูมิอ้างอิงhttp://codex.wordpress.org/Template_Hierarchyเป็นสิ่งที่ฉันมักจะใช้
มีปลั๊กอินชื่อTheme Checkซึ่งทำสิ่งนี้อย่างแน่นอน จะแสดงชื่อของไฟล์เทมเพลตปัจจุบันที่ใช้เป็นความคิดเห็น HTML
ไปเลย:
HTML-รายการที่มีทั้งหมดแฟ้มแม่แบบในการใช้งานสำหรับหน้า Landing Page ในปัจจุบันรวมทั้งแม่แบบชิ้นส่วนจากปลั๊กอินธีมเด็กและ / หรือผู้ปกครองรวมกันธีมทั้งหมดในหนึ่งบรรทัดของรหัส:
echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';
คุณอาจจะต้องตรวจสอบว่าเซิร์ฟเวอร์ของคุณไม่ได้กลับมาทับ Dubble ที่เส้นทางใด อย่าลืมที่จะวางนี้หลังจากแฟ้มแม่จริงทั้งหมดถูกนำมาใช้เหมือนใน footer.php แต่ก่อนที่บาร์ผู้ดูแลระบบการแสดงผล
หากadmin-bar stuff
เส้นทางแสดงที่ด้านบนหรือไฟล์อื่นให้เปลี่ยนชื่อไฟล์template-loader.php
ในบรรทัดของรหัสนี้เป็น: ชื่อไฟล์อะไรก็ตามที่คุณต้องแยกออก บ่อยครั้ง:class-wp-admin-bar.php
หากคุณต้องการสิ่งนี้ในแถบผู้ดูแลระบบให้ใช้สิทธิพิเศษที่เหมาะสม (เร็วที่สุด) เพื่อทำให้ shure ไม่มีไฟล์ใดถูกป้อนในตอนท้ายของรายการนี้ ตัวอย่างเช่น:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
ลำดับความสำคัญ-5
ทำให้ shure โหลดได้ก่อน กุญแจสำคัญคือการโทรget_included_files()
ในเวลาที่เหมาะสมมิฉะนั้นจะต้องมีการบีบอาเรย์ด้วย!
หากต้องการแยกสิ่งนี้:
คุณไม่สามารถรวบรวมไฟล์เทมเพลตรวมโดยไม่มี PHP ย้อนหลัง Superglobalsภายในเคยชินเก็บพวกเขาทั้งหมดtemplate_include
อีกวิธีคือ "วางเครื่องหมาย" ในไฟล์เทมเพลตแต่ละไฟล์ แต่ถ้าคุณต้องการโต้ตอบกับไฟล์ก่อนคุณต้องเสียเวลาและความคิดทั้งหมด
1)เราต้องตรวจสอบภายในไฟล์ทั้งหมดที่มีการใช้งานโดยการร้องขอ Wordpress ปัจจุบัน และพวกเขาก็มีมากมาย! อย่าแปลกใจถ้าคุณใช้ไฟล์ 300 ไฟล์ก่อนลงทะเบียน
$included_files = str_replace('\\', '/', get_included_files());
เราใช้ PHP เนทีฟ get_included_files () แปลงแบ็กสแลชเพื่อส่งต่อสแลชเพื่อให้ตรงกับเวิร์ดเพรสส่วนใหญ่ที่กลับมา
2)เรากำลังตัดอาเรย์นั้นจากที่ที่ template-loader.php ถูกลงทะเบียน หลังจากนั้น get_included_files () ที่มีประชากรควรมีเฉพาะไฟล์เทมเพลต
/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);
/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);
3)ตัดผลลัพธ์ให้สั้นลงเราไม่จำเป็นต้องใช้พา ธ จนกว่าโฟลเดอร์ธีมหรือโฟลเดอร์ปลั๊กอินเป็นเทมเพลตที่ใช้งานสามารถผสมจากปลั๊กอินธีมหรือโฟลเดอร์ธีมเด็ก
$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);
4)ในที่สุดแปลงจากอาร์เรย์เป็นรายการ HTML ที่ดี
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
อาจจำเป็นต้องมีการดัดแปลงครั้งสุดท้ายในตอนที่ 3) -replacementหากคุณไม่ต้องการให้มีปลั๊กอิน พวกเขาอาจเรียกclass-files
ช้าและ "ตัด" ในระหว่างการประมวลผลเอาท์พุทแม่แบบ
อย่างไรก็ตามฉันพบว่ามีเหตุผลที่จะทำให้พวกเขามองเห็นได้เนื่องจากความคิดคือการติดตามสิ่งที่ถูกโหลดแม้ว่ามันจะไม่ใช่ "เทมเพลต" ที่แสดงผลในระยะนี้