如何在自定义帖子类型的页面属性中获取模板下拉菜单?

时间:2011-12-01 作者:Jenny

注册自定义帖子类型时,我会设置:

\'hierarchical\'   => true,
\'supports\'       => array( \'title\',\'author\', \'page-attributes\' ),
所以,我很乐意在创建新帖子时在属性框中看到“顺序”、“模板”、“家长”。但是,我没有看到“模板”下拉列表。我还应该做些什么来支持“模板”的选择?

4 个回复
最合适的回答,由SO网友:Joshua Abenazer 整理而成

不能以这种方式将模板应用于自定义帖子类型。只有在帖子类型为“page”时才会显示(请检查wp admin/includes/meta-box.php第568行)。但是,如果您想以相同的方式设置所有单个自定义帖子类型的样式,但与其他帖子类型不同,则可以使用单个-[帖子类型]。php->http://codex.wordpress.org/images/1/18/Template_Hierarchy.png

SO网友:Picard

从Wordpress 4.7开始,自定义模板也可用于自定义帖子类型,定义模板时,在模板名称下方添加另一行,如(其中“product”是您的自定义帖子类型):

<?php
/*
Template Name: My custom layout
Template Post Type: post, page, product
*/

// your code here
注册自定义帖子类型时,请记住添加“页面属性”:

\'supports\' => array(\'title\', \'page-attributes\'),
显示“发布属性”框。

SO网友:Nathan Powell

对于我的主题,我提供了“虚拟”模板。没有具体的{template}.php 我的主题中的文件,因此我对页面模板进行了如下筛选:

function my_virtual_templates( $templates ) {

    $my_virtual_templates = array(
        \'virtual_template_id_1\' => \'Template 1\',
        \'virtual_template_id_2\' => \'Template 2\',
        \'virtual_template_id_3\' => \'Template 3\'
    );

    // Merge with any templates already available
    $templates = array_merge( $templates, $my_virtual_templates );

    return $templates;
}

add_filter( \'theme_page_templates\', \'my_virtual_templates\' );
当我看到这篇文章时,我正在寻找一种“简单”的方法来在自定义帖子类型(CPT)上添加实际的帖子元框。因为我的新CPT将使用相同的“虚拟”模板阵列,所以我只需要在适当的位置设置一个post meta框。

使用theme_{$post_type}_templates 它会自动为我创建这个帖子元框区域。所以我的CPT被称为my_cpt 我添加了如下过滤器:

add_filter( \'theme_my_cpt_templates\', \'my_virtual_templates\');
现在,元框和选择器出现了,我甚至可以在批量编辑屏幕上进行更改,因为这都是内置的。非常方便!

SO网友:Kamilos

只需创建任何模板文件并在模板头中设置以下内容:

/*
Template Name: Some Name
Template Post Type: your_type, page
*/
然后模板选择器出现在“发布属性”中

结束

相关推荐