is_page_template () เปรียบเทียบกับอะไร?


10

เมื่อมองดูเอกสาร Wordpressมันบอกว่าis_page_template()เปรียบเทียบกับ "ชื่อเทมเพลต" ถ้ามีให้

ฉันมีแม่แบบเก็บไว้ในที่page-homepage.phpเรียกว่าHomepage:

/*
 * Template Name: Homepage
 * Description: The template for displaying the homepage
 */

และฉันมีรหัสที่ฉันต้องการเรียกใช้ใน functions.php เมื่อฉันใช้แม่แบบนั้น:

if (is_page_template('Homepage')) { 
   ...

แต่มันจะไม่ถูกเรียกใช้เมื่อฉันอยู่ในหน้าที่ใช้เทมเพลตนั้น

เมื่อฉันดูรหัสที่ Wordpress เรียกใช้is_page_template()ดูเหมือนว่าจริง ๆ แล้วตรวจสอบชื่อเอกสารไม่ใช่ชื่อแม่แบบ ... ?

function is_page_template( $template = '' ) {

    $page_template = get_page_template_slug( get_queried_object_id() );

    if ( $template == $page_template )
        return true;

ในกรณีของฉันมันดูเหมือนว่า$page_templateเป็นpage-homepage.php- ไม่ใช่ชื่อแม่แบบเช่นเอกสารที่แสดงให้เห็น ... ?

ฉันกำลังทำอะไรผิดหรือเปล่า?


สังเกตที่ดีเกี่ยวกับเอกสาร
Birgire

คำตอบ:


15

สภาพของคุณควรเขียนดังนี้:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

ฉันเชื่อว่าความสับสนนั้นเกิดจากสองสิ่ง:

  1. เอกสารอ้างอิงถึง "ชื่อ" คลุมเครือ การระบุ "ชื่อไฟล์" จะทำให้เอกสารชัดเจนยิ่งขึ้น
  2. โค้ดด้านหลังis_page_template()แสดงget_page_template_slug()ฟังก์ชั่นที่แกนกลางของมัน ฟังก์ชั่นนี้จะส่งคืนชื่อไฟล์ไม่ใช่แม่แบบกระสุน https://codex.wordpress.org/Function_Reference/get_page_template_slug

เมื่อระบุอาร์กิวเมนต์สำหรับis_page_template()ฟังก์ชัน (ดังในตัวอย่างด้านบน) พา ธ ไฟล์จะสัมพันธ์กับรูทธีม

ฟังก์ชั่นนี้จะไม่ทำงานภายในลูป


2
มันจะดีถ้ามีคำอธิบายว่าเส้นทางมาถึงที่นี่
Birgire

1
เพิ่มคำอธิบายเพิ่มเติมและรายละเอียดเกี่ยวกับสาเหตุที่ทำให้เกิดความสับสน
jdm2112

3
ว้าว. ความวุ่นวายสองเท่า ฉันสามารถเข้าใจเอกสารที่ค่อนข้างคลุมเครือ (แม้ว่าควรได้รับการแก้ไขจริง ๆ ) แต่ฉันประหลาดใจจริงๆที่get_page_template_slug()ไม่ได้คืนกระสุนจริง ๆ !
Django Reinhardt

ตกลง ให้ความช่วยเหลือเพิ่มเติมกับความคิดที่ว่า "การตั้งชื่อสิ่ง" เป็นหนึ่งในสิ่งที่ยากที่สุดเมื่อเขียนโค้ด
jdm2112

คำตอบนี้มีโซลูชัน "แนวปฏิบัติที่ดีที่สุด" อย่างไรก็ตามหากหน้าเว็บของคุณใช้ "เทมเพลตเริ่มต้น" (แต่เป็นเทมเพลตหน้าจริง ๆ ) คำตอบนี้อาจสนใจคุณ
rinogo

7

ฉันคิดว่าสิ่งที่ดีที่สุดที่จะพูดคือตรวจสอบชื่อไฟล์และในกรณีของคุณมันจะเป็น page-homepage.php ดังนั้น:

if (is_page_template('page-homepage.php')) { 
  ...

สิ่งอื่นที่ควรพิจารณาคือถ้าไฟล์เท็มเพลตถูกจัดเก็บจริงภายในโฟลเดอร์อื่นภายในธีม อ่านเพิ่มเติม

อีกสิ่งหนึ่งTemplate Name: Homepageคือสิ่งที่ใช้ในการระบุแม่แบบเมื่อสร้างหน้าหรือโพสต์


ในฐานะที่เป็นคำตอบอื่นชี้ให้เห็น - มันยังคำนึงถึงเส้นทาง page-templates/page-homepage.phpแตกต่างจากเทมเพลตในรูทธีม
Howdy_McGee

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