将模板添加到自定义帖子类型

时间:2016-07-06 作者:Sam

我正在用自定义帖子类型重新编码我的网站,以便更好地组织,有更好的搜索体验,并且能够对其他贡献者隐藏一些页面,但我有一个小问题。

我已经设置了一个名为“文件”的帖子类型,其中包含一些我的贡献者不应该看到的文件。基本上是法律页面、联系人页面等等。

由于我的所有页面都是默认的post类型,所以我可以在页面属性中为每个页面选择一个模板。现在,在新的自定义页面类型中,我只能选择页面的顺序,而不能选择其他内容。因此,我有一个用于法律页面的模板和另一个用于联系人页面的模板,其中包括所有PHP代码。如何在新的自定义帖子类型中选择这些模板?

<小时>

EDIT

好的,我明白了,只有通过设置一个名为single-*(post_type_name)*. 但正如我所说,我有两个不同的模板,而且很快还会有更多模板,所以我如何将它们设置为post\\u类型中的一个或两个帖子。一定有可能吧?WordPress的制造商不太可能让我们为单个文件创建新的post\\u类型。。。

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

据我所知,你有两个选择。

Option 1: Dynamic Solution 为自定义帖子类型创建类别-每个类别都有自己的模板。

然后创建一个基于类别拆分的模板。这意味着在单个postypename中使用常规页眉和页脚。php和任何您想应用于这两个模板的其他内容,但实际上,您需要为“如果是类别x,请使用内容y模板(或部分,我喜欢部分)”和“如果是类别z,请使用内容z模板(或部分)”创建一些php逻辑。我假设,如果您使用的是模板,那么您可以使用相应的代码,但如果不只是注释,我可以提供一个示例。

Option 2: Static Solution 自定义帖子类型中的每个帖子都有自己的模板。

您需要单个posttypename。php作为默认值,但之后可以创建单个postypename postslug。php和presto,您有一个特定帖子的自定义模板,您可以在其中混日子。只要你的鼻涕虫匹配,它就会知道该怎么做。

Option 2 Example:

单个文件。php(作为默认模板)

single-file-legaldocument2。php(作为yourdomain.ca/file/legaldocument2的自定义模板)

SO网友:Vinod Dalvi

从…起WordPress version 4.7 现在,您可以将自定义页面模板与页面一起分配给其他帖子类型。请查看此主题中发布的答案https://wordpress.stackexchange.com/a/264573/14347

SO网友:Milo

这个single_template 过滤器将允许您为您的CPT使用任何模板文件,但您需要提供一些选择和存储模板名称或其他引用的方法,以使其成为动态解决方案。

内置的page post type通过读取主题中的所有有效模板文件,并将该列表添加到meta box, 它将所选文件名存储在post meta中。

通过将文件名手动保存在Custom Field (post meta), 然后添加一个过滤器来检查当前帖子中的元键。下面是一个未经测试的快速示例,来自我在上面的评论中链接的另一个答案-

function wpa_single_cpt_template( $templates = \'\' ){
    $single = get_queried_object();

    if( \'files\' == $single->post_type ){
        $template_name = get_post_meta( $single->ID, \'my_template_file\', \'true\' );
        if( !empty( $template_name ) ){
            $templates = locate_template( $template_name, false );
        }
    }
    return $templates;
}
add_filter( \'single_template\', \'wpa_single_cpt_template\' );

SO网友:Dev

在子主题中创建这样的模板文件。

<?php

// Template Name: CPT Template
// Template Post Type: files
假设files是自定义帖子类型的名称。

WordPress现在支持this functionality

相关推荐