問題描述
我正在編寫一個自定義帖子型別的外掛。其中一部分我透過簡訊輸出到模板。但是其他部分需要一個自定義的帖子模板,我想出瞭如何使用 CPT 的模板層次結構。但是自定義模板是在主題中,我認為外掛應該是 self-contained,至少要開始。
那麼這裡最好的做法是什麼?我們如何在 CPT 外掛中包含模板檔案?你能指點一下我們如何做好這個例子嗎?
謝謝你的幫助。
最佳解決方案
So what’s the best practice here?
我會說,讓主題處理它並提供一個預設的外掛的組合。
您可以使用 single_template 過濾器來切換模板。在你的回撥中,看看主題是否提供了 post 型別的模板,如果沒有做,什麼都不做。
<?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;
}
我喜歡這種方法最好。結合它提供了一套完整的”template tags”(例如 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;
}
次佳解決方案
如果請求是針對您的帖子型別,您可以掛接到 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;
}
但這樣會大大改變外觀。仍然沒有乾淨的解決方案。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。