ใช้ template_include พร้อมกับประเภทโพสต์ที่กำหนดเอง


11

ฉันต้องการตรวจสอบเทมเพลตที่เหมาะสมในโฟลเดอร์ธีมก่อนที่จะกลับไปที่ไฟล์ในไดเรกทอรีปลั๊กอินของฉัน นี่คือรหัสของฉัน:

add_filter ('template_include', 'sermon_template_include');
ฟังก์ชัน sermon_template_include ($ เทมเพลต) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        ถ้า (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php')
              ส่งคืน TEMPLATEDIR '/archive-wpfc_sermon.php';
           ส่งคืนชื่อ (__ FILE__) '/views/archive-wpfc_sermon.php';
        อื่น:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php')
              ส่งคืน TEMPLATEDIR '/single-wpfc_sermon.php';
           ส่งคืนชื่อ (__ FILE__) '/views/single-wpfc_sermon.php';
        endif;
    }
    ส่งกลับ $ แม่แบบ;
}

ปัญหาคือมันไม่ทำงาน! :-) มันเลือกไฟล์ในโฟลเดอร์ปลั๊กอินของฉันเสมอ ความคิดใดที่จะทำอย่างไร ฉันลองชุดรูปแบบมากมาย แต่ดูเหมือนว่าฉันจะไม่ทำงานอะไรอีก! ขอบคุณล่วงหน้า! ช่องเสียบ

แก้ไข

ฉันคาดหวังว่าไฟล์เก็บถาวร -wpfc_sermon.php จะถูกส่งคืนจากโฟลเดอร์ธีมหากมีอยู่ อย่างไรก็ตามไฟล์จากปลั๊กอินของฉันจะได้รับคืนเสมอ ขอบคุณสำหรับความช่วยเหลือของคุณ! นี่คือจากปลั๊กอิน Sermon Manager ของฉันที่มีอยู่ในพื้นที่เก็บข้อมูล


ไฟล์เท็มเพลต Theme ใดที่จะถูกส่งคืนเมื่อคุณต้องการให้ไฟล์เท็มเพลต Plugin ของคุณส่งคืน?
Chip Bennett

ฉันคาดหวังว่าไฟล์เก็บถาวร -wpfc_sermon.php จะถูกส่งคืนจากโฟลเดอร์ธีมหากมีอยู่ อย่างไรก็ตามไฟล์จากปลั๊กอินของฉันจะได้รับคืนเสมอ ขอบคุณสำหรับความช่วยเหลือ @ChipBennett! นี่คือจากปลั๊กอิน Sermon Manager ของฉันที่มีอยู่ในพื้นที่เก็บข้อมูล
แจ็ค

คำตอบ:


6

ดังนั้นฉันไม่แน่ใจว่าสิ่งที่ทำให้เกิดปัญหา แต่คุณอาจลองต่อไปนี้:

  1. เส้นทางไฟล์ปลั๊กอิน : แทนที่dirname(__FILE__)ด้วยplugin_dir_path( __FILE__ )
  2. พา ธ ไฟล์ธีม : แทนที่TEMPLATEDIRด้วยget_stylesheet_directory()

เป็นไปได้ว่าปัญหามาจากการอ้างอิงค่าคงที่โดยตรง


0

ฉันไม่แน่ใจว่าสิ่งนี้จะได้ผลสำหรับคุณหรือไม่ ฉันใช้สิ่งนี้ตลอดเวลาสำหรับประเภทโพสต์ที่กำหนดเองเมื่อต้องการเทมเพลตพิเศษ

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

สิ่งที่คุณต้องทำคือเพิ่มสคริปต์นี้ในไฟล์ functions.php ของคุณและวางไฟล์เทมเพลตในไดเรกทอรีธีมของคุณ

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

ฉันลืม ... อย่าลืมเพิ่มการกระทำ :)

add_action("template_redirect", 'my_template_redirect');

ขอบคุณ @Nicole รหัสที่ฉันโพสต์ใช้งานได้ดีในการโทรหาไฟล์เทมเพลตของฉัน อย่างไรก็ตามฉันต้องการสแกนโฟลเดอร์ธีมปัจจุบันเพื่อหาไฟล์ที่มีชื่อเดียวกันก่อนที่จะโหลดหนึ่งไฟล์ในโฟลเดอร์ปลั๊กอินของฉัน
แจ็ค

@ แจ็คดังนั้นโดยทั่วไปจะเรียกไฟล์ของคุณจากไดเรกทอรีปลั๊กอินก่อนแม่แบบในไดเรกทอรีธีมในขณะนี้หรือไม่ อืมจะต้องคิดอีกที : DI รักความท้าทายที่ดี!
นิโคล

ถูกตัอง! มันทำให้ฉันนิ่งงันจริงๆ
แจ็ค

@ แจ็คนี่อาจฟังดูเหมือนเป็นคำถามโง่ดังนั้นโปรดยกโทษให้ฉันถ้ามันเป็น :) รหัสที่คุณโพสต์นั้นอยู่ในปลั๊กอินหรือว่าอยู่ในไฟล์ functions.php?
Nicole

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