如何设置默认CPT模板和创建POST属性的显示规则?

时间:2017-04-15 作者:Diogo

我已经注册了一个新的帖子类型,并制作了一个自定义模板来显示它。根据WP对CPT模板的最新支持,要使其对任何给定的CPT可用,只需将此标头放在模板文件上:

/**
 * Template Name: Single Book
 * Template Post Type: book
 */
然后,按照模板层次结构,我将我的模板命名为single-book.php. 好了,现在我有了这个模板,可以用于“book”帖子类型。它起作用了。凉的

然而,出于某种原因,我仍然需要manually select it within the post attribute section every time I create a new book 作为default selection is the standard template for posts. (当按照上述方式命名后,默认值应该是我的自定义模板,对吗?除非我遗漏了什么…)

因此,如果我/用户有任何机会忘记更改,CPT显然不会在前端正确显示,因为它没有使用为其制作的模板。

我必须防止这种情况发生,因为我将与大量CPT合作,所以在注册CPT时,我需要能够从两种方法中进行选择:

1-Determining which template is selected by default on the post attribute section. (适用于可根据情况使用一系列自定义模板的CPT,但要确保默认选择是适当的,而不是任何其他标准模板);

2-Making the post attribute section DISAPPEAR for CPTs that should ONLY use a specific custom template. (同时确保所用的是这个)。

我做了大量的研究,根本找不到关于如何进行这项工作的任何信息。

然而,我怀疑这不仅可以轻松地实现,而且在注册post类型数组时,它还与post类型数组中的某些参数有关。

我不确定,但可能大致是这样的:

add_theme_support(\'custom-post\', array (
    \'book\'=> array (
       \'singular\' => ... ,
       \'plural\' => ... ,
       \'supports\' => array(...),
       \'some-parameter-to-set-default-template\' => ... ,
       \'some-parameter-to-disable-post-attribute-selection\' => ...

    ),
) );
有人能帮忙吗?

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

幸亏Milo 我设法解决了我的两个需要。他的评论回答了其中一个问题,为我找到另一个问题开辟了道路。

所以,如果我只想ONE 任何给定CPT的自定义模板,都是模板层次结构。不需要像我那样在标题中插入注释。就我而言,CPT注册为book, 所以模板文件被命名为single-book.php.

现在,在创建一本新书时,将没有post属性部分,它将使用正确的模板。(这是意料之中的……标题中的评论部分把事情搞砸了)。

但是,如果我想more custom templates for the same CPT 这时,标题中的评论部分开始发挥作用。

然后我可以命名new 模板文件随便我想要什么like-really-whatever-I-want.php 并按照以下结构将其定位到适当的职位类型:

/**
 * Template Name: Whatever you wanna call the template
 * Template Post Type: book
*/
这样做将在添加新书时调出post属性部分。默认模板仍然是之前按照模板层次结构创建的模板,但现在将有第二个模板可供选择。

我可以冲洗并重复此过程,以获得任意给定CPT所需的任意多个模板。

如果我想让这些额外模板中的一个被多个CPT使用,我可以通过简单地将其他帖子类型名称添加到我开始使用的那一个旁边来实现。像这样:

/**
 * Template Name: Whatever you wanna call the template
 * Template Post Type: book, event, game, movie
*/
结果证明一切都非常非常简单。然而,如此强大。希望这可以帮助其他人。

SO网友:rudtek

试着给它命名为单本书。php。通常,当你注册一个post类型时,它是复数的。使用您在register\\u custom\\u PostType中注册CPT的确切措辞。

我喜欢使用名称空间来避免这些问题。因此,将wpse\\U books注册为post类型,那么您的单曲将是single-wpse\\U books。php和archive将是archive-wpse\\u书籍。php

无需设置参数即可完成此操作,因为wordpress将根据帖子名称自动查找单个/归档文件。

您也不应该在头部添加模板名称。您可以评论它的用途,但不要说模板,因为这可能会在以后混淆事情。

相关推荐

自定义Post-type未返回正确的Child_Of

Situation我正在使用高级自定义字段插件为自定义帖子类型设置一个复选框。如果选中此框,则此查询应返回该框。到目前为止,查询工作正常。The issue我希望它显示的页面都是一个页面的子页面。这个查询返回带有复选框的所有页面,而不是只返回带有复选框的当前页面的子页面。My code页面顶部<?php $tid = get_the_ID(); ?> 沿着页面进一步<?php $i == 0; global $post; $myposts =