使用同一模板的两种帖子类型

时间:2019-04-26 作者:aletede91

我有两种自定义帖子类型,它们的slug是:slug-aslug-b.

我创建了两个相同的单一模板:single-slug-a.phpsingle-slug-b.php.

这显然是预期的效果。

有没有办法只为我的两种帖子类型创建一个PHP文件。single-slug-a-and-slug-b.php)?

<小时>

SOLUTION:

我找到了以下解决方案:

add_filter( \'template_include\', function( $template ) 
{
    // your custom post types
    $my_types = array( \'slug-a\', \'slug-b\' );
    $post_type = get_post_type();

    if ( ! in_array( $post_type, $my_types ) )
        return $template;

    return get_stylesheet_directory() . \'/single-my-template.php\'; 
});
有没有更正确的方法?

1 个回复
SO网友:WebElaine

另一个选项是将模板创建为页面模板,并具有两种CPT支持page-attributes 这样他们就可以使用页面模板。

通常将模板命名为tpl-yourname.php 它将在顶部包含一条评论:

<?php
/*
* Template Name: Your Name
* Template Post Type: cpt-slug-a, cpt-slug-b
*
模板名称将是您在编辑其中一个CPT时在下拉菜单中看到的名称。模板帖子类型需要包含帖子类型的名称,即指定为“帖子”的WP核心帖子和指定为“公文包”的称为公文包的CPT。

您还必须告诉每个CPT支持page-attributes 这样编辑器将显示模板下拉列表。

register_post_type(\'cpt-slug-a\',
    // lots of other code here
    // this just shows the line you need to add "page-attributes" to
    \'supports\' => array(\'title\', \'editor\', \'page-attributes\');
    // lots of other code here
);
只需添加page-attributes 将CPTs支持的任何其他内容保留到阵列。

至于哪种方式是“正确的”,我认为这是一个偏好的问题。对我个人来说,这种使用页面模板的方式似乎更灵活一些,因为非技术人员可以轻松地将模板应用到编辑器中他们喜欢的任何页面,而您最初的方式需要编码才能将模板应用到任何其他页面。

相关推荐