WordPress Template Hierarchy

时间:2015-10-07 作者:Aram Mkrtchyan

嗨,我对文件名有疑问。如果我有自定义帖子类型,我可以创建模板,例如single-portfolio.php 然后把公文包帖子的内容放到这个文件中,但我需要把那个帖子放到不同的文件中,例如,我想把它放到各个文件中single-portfolio-post1.php 像这样的东西,但我创建的第二个文件不起作用,我该怎么做?

非常感谢。

4 个回复
SO网友:TheDeadMedic

您可以使用动态过滤器{type}_template (其中{type} 是当前查询类型,例如。single, index 等)中找到get_query_template():

function wpse_204848_get_id_template( $template ) {
    if ( $post = get_queried_object() ) {
        if ( $_template = locate_template( "single-{$post->post_type}-{$post->ID}.php" ) )
            $template = $_template; 
    }

    return $template;
}

add_filter( \'single_template\', \'wpse_204848_get_id_template\' );
对于ID的公文包帖子5, 它将使用模板single-portfolio-5.php 如果存在。

SO网友:Tom J Nowell

WordPress 4.3及以下版本的模板层次结构中没有基于帖子ID显示模板的内容,除非您使用page 岗位类型。

相反,您必须将条件逻辑放在single-portfolio.php.

I would also recommend you use meta options, terms, or the post slug instead of the ID.If you use post IDs, a simple import and export of the content would break your theme.

还可以考虑使用下拉菜单实现一个元盒,该下拉菜单允许您选择模板。这样,您就不必在主题中限制自己和硬编码内容,并且可以为某些公文包项目构建可重用的通用模板

WordPress 4.4

4.4 adds a new template to the hierarchy 其形式如下:

single-{post_type}-{post_name}.php
从r34800起,新的主题模板已添加到主题层次结构中:single-{post\\u type}-{post\\u name}。php。此模板遵循is\\u single()的规则,用于单个帖子或自定义帖子类型。它对于在自定义帖子类型中定位特定帖子非常有用,并为页面和分类提供了模板一致性。它排在单身之前。php和single-{post\\u type}。php。

也不要忘记,在WordPress 4.3单数中。引入了php,并修复了附件模板的层次结构。

SO网友:birgire

从WordPress版本4.4开始,这种模板结构:

single-{post_type}-{post_name}.php 
将受支持。更多here on make.wordpress.org.

SO网友:Mark Kaplun

与其他人的回答稍有不同

如果你对一篇特定的文章有不同的设计,最好在尝试编写新模板之前,先看看你能用CSS做些什么。

问题仍然是,如何确定哪些内容应该与设计A搭配,哪些内容应该与设计B搭配,我认为最好的做法是添加一个元框,在其中可以选择设计并采用您的sing{post type}。php代码将其考虑在内。如果非常不同,那么可以将代码放在不同的文件中,但这里的重点是让管理员控制所使用的模板。

将控制权交给管理员的原因是,您可能希望重用模板,ID和slug等内容可能会更改(尤其是slug)

相关推荐

Templates for Mobile Site

是否有任何内置方法可以根据浏览器大小显示不同的模板(即移动设备检测)?我做了一些研究,我能找到的只是大量插件,它们的功能远远超出了我的需要。我基本上只需要一种方法,将移动目录添加到我的主题中,并为移动用户显示该主题。