ปลั๊กอินประเภทโพสต์ที่กำหนดเอง: ฉันจะวางเทมเพลตที่ไหน?


11

ฉันกำลังเขียนปลั๊กอินประเภทโพสต์ที่กำหนดเอง ส่วนหนึ่งของฉันฉันกำลังส่งออกไปยังแม่แบบผ่านทางรหัสย่อ แต่ส่วนอื่น ๆ ต้องการเทมเพลตการโพสต์ที่กำหนดเองและฉันก็รู้วิธีใช้ลำดับชั้นของเทมเพลตสำหรับ CPT แต่เทมเพลตที่กำหนดเองนั้นอยู่ในชุดรูปแบบและฉันคิดว่าปลั๊กอินควรมีอยู่ในตัวเองอย่างน้อยก็ต้องเริ่มด้วย

ดังนั้นวิธีปฏิบัติที่ดีที่สุดที่นี่คืออะไร เราจะรวมไฟล์เทมเพลตในปลั๊กอิน CPT ได้อย่างไร คุณช่วยชี้ให้ฉันเห็นตัวอย่างที่ดีของการทำสิ่งนี้ได้เป็นพิเศษ?

ขอบคุณสำหรับความช่วยเหลือของคุณ.



1
ไม่แน่ใจว่าเป็นเรื่องซ้ำซ้อน แต่เป็นคำถามเชิงอัตวิสัย แนวทางปฏิบัติที่ดีที่สุดสำหรับฉันคือการปล่อยให้ธีมจัดการกับมัน แนวทางปฏิบัติที่ดีที่สุดสำหรับผู้อื่นคือการทำให้ปลั๊กอินอยู่ในตัวเองอย่างสมบูรณ์
chrisguitarguy

@JohannesPille ฉันค้นหาก่อนถาม แต่ขอบคุณสำหรับลิงค์ ฉันจะดูมัน
NotoriousWebmaster

1
@chrisguitarguy เห็นด้วย ปัญหาของฉันในการปล่อยให้จัดการกับธีมคือถ้าเราเปลี่ยนธีมเราต้องทำการปรับแต่งบางอย่างเพื่อรองรับปลั๊กอิน มิฉะนั้นเราสูญเสียสิ่งที่ CPT นำมาสู่ปาร์ตี้
NotoriousWebmaster

คำตอบ:


8

ดังนั้นวิธีปฏิบัติที่ดีที่สุดที่นี่คืออะไร

ฉันจะบอกว่าการรวมกันของการให้ชุดรูปแบบจัดการกับมันและให้เริ่มต้นด้วยปลั๊กอินของคุณ

คุณสามารถใช้single_templateตัวกรองเพื่อเปลี่ยนเทมเพลต ในการโทรกลับของคุณดูว่าชุดรูปแบบให้แม่แบบสำหรับประเภทโพสต์ถ้าเป็นเช่นนั้นไม่ทำอะไรเลย

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

ฉันชอบวิธีนี้ดีที่สุด รวมกับการให้ชุดเสียงของ "แท็กแม่" (เช่น. the_content, the_title) สนับสนุนว่าสิ่งที่ข้อมูลที่กำหนดเองที่ไปพร้อมกับประเภทโพสต์ของคุณและคุณให้ผู้ใช้พลังงานมากการปรับแต่งค่าเริ่มต้นพร้อมกับเสียงบาง Bbpress ทำสิ่งนี้ได้เป็นอย่างดี: รวมแม่แบบผู้ใช้หากพบพวกเขาและให้แท็กแม่แบบจำนวนมาก

หรือคุณสามารถใช้การโทรกลับพร้อมthe_contentตัวกรองและเพียงแค่เปลี่ยนเนื้อหาในเนื้อหาเอง

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}

ฉันเห็นด้วยกับ @toscho ว่าไม่มีวิธีแก้ปัญหาที่ไม่สะอาด แต่ฉันชอบแนวคิดของการเสนอแท็กหมวดหมู่ ฉันสงสัยว่าในที่สุดฉันจะมีโฟลเดอร์ชุดรูปแบบในปลั๊กอินของฉันด้วยเทมเพลต CPT ตัวอย่างและแนะนำให้ผู้ใช้ปรับให้เข้ากับสถานการณ์ของพวกเขา ฉันชอบตัวกรอง the_content ด้วยเพราะนั่นเป็นการเชื่อมต่อเนื้อหาของฉันภายในเค้าโครงของผู้ใช้ ฉันอาจใช้ทั้งสองและอนุญาตให้ผู้ใช้เลือกวิธีที่จะไปพร้อมกับตัวเลือกสลับ
NotoriousWebmaster

3

คุณสามารถขอtemplate_includeและส่งคืนไฟล์ปลั๊กอินของคุณได้หากคำขอนั้นเป็นประเภทโพสต์ของคุณ:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

แต่นี่จะเปลี่ยนรูปลักษณ์อย่างมาก ยังไม่มีวิธีแก้ปัญหาที่สะอาด


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