คุณจะทราบได้อย่างไรว่าหน้าเทมเพลตใดกำลังแสดงหน้าปัจจุบัน


54

เมื่อคุณเปิดใช้งานชุดรูปแบบ wordpress มันเป็นเรื่องยุ่งยากเสมอที่จะค้นหาไฟล์ที่จะเปลี่ยนสิ่งต่าง ๆ มีความคิดใดที่จะทำให้สิ่งต่าง ๆ ง่ายขึ้น?

แต่ในทางกลับกันเมื่อพิจารณาถึงฟังก์ชั่น get_template_part สิ่งนี้อาจเป็นไปไม่ได้ พูดว่าอะไรนะ?


1
ฉันตรวจสอบ html และค้นหาแท็กที่ระบุหรือสิ่งที่ไม่ซ้ำกัน
Naoise Golden

1
ดูซอร์สโค้ดและค้นหาคลาสบอดี้ที่บอกคุณว่าใช้เทมเพลตใด ให้รหัสแก่คุณด้วย
แบรดดาลตัน

มีความเป็นไปได้ที่ซ้ำกันของการรับชื่อไฟล์เทมเพลตปัจจุบัน
Burgi

@BradDalton +1 พิเศษเมื่อเราไม่ได้รับอนุญาตให้ติดตั้งปลั๊กอินหรือเขียนฟังก์ชั่นเพื่อให้บรรลุเป้าหมาย
Subrata Sarkar

คำตอบ:


34

ขอ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() ); 
?>

ตอนนี้คุณสามารถติดตามมุมมองที่ใช้เทมเพลตใดในขณะที่เก็บข้อมูลนั้นไว้ห่างจากผู้เข้าชมของคุณ


1
หากมีสิ่งผิดปกติเกิดขึ้นกับคำตอบนี้หรือหากใครก็ตามสามารถให้ความเห็นเกี่ยวกับสิ่งที่สามารถทำได้เพื่อปรับปรุงคำตอบมีอยู่ที่นี่ให้ทิ้งความคิดเห็นที่นี่และแบ่งปันความคิดและแนวคิดของคุณเกี่ยวกับวิธีทำให้ดีขึ้น
t31os

1
มันใช้งานไม่ได้มันบอกว่า "ฟังก์ชั่นที่ไม่ได้กำหนด"
Lucas Bustamante

1
@ LucasB เดียวกันที่นี่นั่นเป็นข้อผิดพลาดที่ฉันได้รับ
Lincoln Bergeson

สิ่งนี้ควรเป็นget_page_template
Blazemonger

40

ถ้าทั้งหมดที่คุณต้องการคือการตรวจสอบไฟล์เทมเพลตที่ใช้ในการสร้างหน้าปัจจุบันจากนั้นคุณไม่จำเป็นต้องทำให้โค้ดสกปรก;

มีปลั๊กอินที่มีประโยชน์นี้เรียกว่าเป็นDebug บาร์ มันเป็นตัวช่วยที่ยอดเยี่ยมในหลาย ๆ สถานการณ์รวมถึงตัวคุณด้วย คุณควรตรวจสอบแน่นอน - สำหรับฉันและคนอื่น ๆ มันเป็นคู่หูที่ต้องมีสำหรับการพัฒนา WP

ฉันได้แนบภาพหน้าจอที่อาจทำให้คุณตกหลุมรัก ...

ป้อนคำอธิบายรูปภาพที่นี่

ในการทำให้ Debug Bar ทำงานคุณต้องเปิดใช้งานwp_debugและwp_savequeriesตัวเลือกต่างๆ ตัวเลือกเหล่านี้อยู่ในสถานะปิดใช้งานโดยค่าเริ่มต้น

ก่อนที่คุณจะทำการเปลี่ยนแปลงใด ๆ คุณควรคำนึงถึงประเด็นต่อไปนี้:

  • อย่าทำในสภาพแวดล้อมการผลิตเว้นแต่เว็บไซต์จะไม่รองรับปริมาณการเข้าชมจำนวนมาก
  • เมื่อคุณเสร็จสิ้นการดีบักตรวจสอบให้แน่ใจว่าได้ปิดใช้งานตัวเลือก (โดยเฉพาะตัวเลือก wp_savequeries เนื่องจากมีผลต่อประสิทธิภาพ) ของเว็บไซต์

วิธีทำการเปลี่ยนแปลง:

  1. เปิดwp_config.phpไฟล์ผ่านไคลเอนต์ ftp
  2. ค้นหาwp_debugตัวเลือก define( 'WP_DEBUG', true );แก้ไขมัน หากไม่มีบรรทัดให้เพิ่มลงในไฟล์
  3. ในทำนองเดียวกันแก้ไขหรือเพิ่มบรรทัดdefine( 'SAVEQUERIES', true );ลงในไฟล์
  4. บันทึก คุณพร้อมที่จะทำการดีบัก

ข้อมูลเพิ่มเติม: Codex


2
@justCallMeBiru - ปลั๊กอิน Debug Bar ไม่ต้องการ WP_DEBUGและSAVEQUERIESแม้ว่าพวกเขาจะได้รับการปรับปรุง
Pat J

3
การใช้งานปลั๊กอินเช่นเดียวกับข้อมูลเพียงบิตเดียวนั้นสร้างจำนวนมากของค่าใช้จ่าย imho และดังนั้นจึงเป็นเหตุผลที่ฉันไม่ได้แนะนำในคำตอบของฉันเอง ที่กล่าวไว้ชัดเจนว่าคนต้องการคำตอบนี้ฉันอยากรู้ว่าทำไม
t31os

23

ฉันใช้ฟังก์ชั่นที่ใช้งานง่ายนี้ซึ่งจะแสดงเทมเพลตปัจจุบันสำหรับผู้ดูแลระดับสูงเท่านั้น:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

หวังว่าจะช่วย :)


2
นี่คือคำตอบของ goto ควรได้รับการยอมรับ
Hybrid Web Dev

12

เพิ่มรหัสต่อไปนี้ทันทีหลังบรรทัด get_header ในแต่ละไฟล์เทมเพลตที่เกี่ยวข้อง:

<!-- <?php echo basename( __FILE__ ); ?> -->

ในเบราว์เซอร์ของคุณ> ดูแหล่งที่มาและชื่อเทมเพลตจะแสดงเป็นความคิดเห็นในรหัส html ของคุณเช่น

<!-- page.php -->

มันเป็นความพยายามมากเกินไปที่จะเพิ่มสิ่งนี้ได้ทุกที่
Adal

4

วิธีที่ง่ายที่สุดที่ฉันพบคือการรวมฟังก์ชั่น WordPress ไว้ในแท็ก body มันจะเพิ่มหลายคลาสขึ้นอยู่กับหน้าที่คุณกำลังดู (หน้าแรกสำหรับหน้า, หน้าสำหรับหน้า ฯลฯ )

ลองใช้งานได้ที่นี่: http://codex.wordpress.org/Function_Reference/body_class

นอกจากนี้ยังมีประโยชน์สำหรับองค์ประกอบการกำหนดเป้าหมายด้วย CSS ในหน้าเหล่านั้น

ทำความรู้จักกับเทมเพลตลำดับชั้น (http://codex.wordpress.org/Template_Hierarchy) ตามที่ David R พูดถึงเป็นความคิดที่ดีเช่นกัน


4

มีปลั๊กอินอีกอันที่เปลือยเปล่าสำหรับจุดประสงค์นี้โดยเฉพาะ ฉันโน้มตัวไปสู่การติดตั้งแถบแก้ปัญหาเพราะคุณสมบัติอื่น ๆ เหล่านั้นดูมีประโยชน์ แต่อันนี้เป็นพื้นฐานและมีความเฉพาะเจาะจงมากขึ้นสำหรับวัตถุประสงค์นี้: http://wordpress.org/extend/plugins/what-the-file/


3

สิ่งหนึ่งที่ง่ายมากที่ฉันทำได้คือการแทรกความคิดเห็น HTML ที่ระบุไฟล์แม่แบบในแต่ละไฟล์ที่เกี่ยวข้องของชุดรูปแบบเช่นที่ด้านบนของ index.php ฉันมี

<!-- index -->

และที่ด้านบนของ front-page.php

<!-- front -->

แต่เห็นได้ชัดว่าต้องแก้ไขธีม ฉันสงสัยว่าคุณสามารถเพิ่มฟังก์ชั่นที่กำหนดเองในไฟล์ footer.php หรือ header.php ซึ่งจะบอกคุณว่าไฟล์ใดถูกใช้ เมธอดด้านบนและแผนภูมิอ้างอิงhttp://codex.wordpress.org/Template_Hierarchyเป็นสิ่งที่ฉันมักจะใช้


3

มีปลั๊กอินชื่อTheme Checkซึ่งทำสิ่งนี้อย่างแน่นอน จะแสดงชื่อของไฟล์เทมเพลตปัจจุบันที่ใช้เป็นความคิดเห็น HTML


3

ไปเลย:

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ช้าและ "ตัด" ในระหว่างการประมวลผลเอาท์พุทแม่แบบ

อย่างไรก็ตามฉันพบว่ามีเหตุผลที่จะทำให้พวกเขามองเห็นได้เนื่องจากความคิดคือการติดตามสิ่งที่ถูกโหลดแม้ว่ามันจะไม่ใช่ "เทมเพลต" ที่แสดงผลในระยะนี้

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