自定义帖子类型插件:我将模板放在哪里?

时间:2013-04-21 作者:NotoriousWebmaster

我正在编写一个自定义帖子类型插件。其中一部分我通过短代码输出到模板。但是其他部分需要一个自定义的帖子模板,我知道了如何使用CPT的模板层次结构。但是自定义模板在主题中,我认为插件应该是自包含的,至少从一开始。

那么这里的最佳实践是什么?我们如何在CPT插件中包含模板文件?你能给我举出一些特别好的例子来说明如何做到这一点吗?

谢谢你的帮助。

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

那么这里的最佳实践是什么?

我想说的是让主题处理它和为插件提供默认值的组合。

您可以使用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;
}

SO网友:fuxia

你可以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;
}
但这将彻底改变外观。仍然没有干净的解决方案。

结束

相关推荐