我正在编写一个自定义帖子类型插件。其中一部分我通过短代码输出到模板。但是其他部分需要一个自定义的帖子模板,我知道了如何使用CPT的模板层次结构。但是自定义模板在主题中,我认为插件应该是自包含的,至少从一开始。
那么这里的最佳实践是什么?我们如何在CPT插件中包含模板文件?你能给我举出一些特别好的例子来说明如何做到这一点吗?
谢谢你的帮助。
我正在编写一个自定义帖子类型插件。其中一部分我通过短代码输出到模板。但是其他部分需要一个自定义的帖子模板,我知道了如何使用CPT的模板层次结构。但是自定义模板在主题中,我认为插件应该是自包含的,至少从一开始。
那么这里的最佳实践是什么?我们如何在CPT插件中包含模板文件?你能给我举出一些特别好的例子来说明如何做到这一点吗?
谢谢你的帮助。
那么这里的最佳实践是什么?
我想说的是让主题处理它和为插件提供默认值的组合。
您可以使用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;
}
你可以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;
}
但这将彻底改变外观。仍然没有干净的解决方案。