创建使用Page.php模板的自定义帖子类型

时间:2016-05-05 作者:Jerry

我正在创建一个插件来注册一个自定义的帖子类型,我希望它能用主题页面显示出来。php模板,而不是帖子。php。我设置了hierarchical 当我注册它时标记,但该帖子。php模板仍被调用。

Way,Way down in wp includes/post(可湿性粉剂/贴剂)内。php似乎决定使用哪个模板,代码如下:

if ( ! empty( $postarr[\'page_template\'] ) && \'page\' == $data[\'post_type\'] ) {
    $post->page_template = $postarr[\'page_template\'];
    $page_templates = wp_get_theme()->get_page_templates( $post );
    ...
这让我觉得帖子模板的使用post_type 正是\'page\'.

我不想定义自己的模板,因为我想处理任何主题。我只想告诉WordPress要使用当前主题的哪些模板。

有一个动作钩,叫做get_template_part_{$slug} 这可能会起到作用,但我不确定它期望的是什么,而且这方面的文档异常零散。

2 个回复
SO网友:fuxia

您可以筛选template_include 然后让WordPress在所有有效模板中搜索页面模板,如page.php, index.php 甚至来自父主题的文件。

add_filter( \'template_include\', function( $template ) {
    return is_singular( [ \'YOUR_POST_TYPE\' ] ) ? get_page_template() : $template;
});

SO网友:frogg3862

就是这样。您应该能够使用类似这样的内容,替换your_post_type:

function get_custom_post_type_template($single_template) {
    global $post;

    if ($post->post_type == \'your_post_type\') {
        $single_template = get_stylesheet_directory_uri() . \'/page.php\';
    }
    return $single_template;
}
add_filter( \'single_template\', \'get_custom_post_type_template\' );