特定帖子的自定义帖子模板

时间:2015-01-04 作者:Dan

我正在建立一个网站,它是一个目录和博客的混合体。有些帖子是典型的带有文本和图像的博客帖子,没有任何特定的结构。然而,其他帖子是“餐厅”帖子,其中包含开放时间、评论分数、地址等的自定义元数据字段。我希望这些类型的帖子有一个非常具体的结构(即顶部的图像滑块,后跟表格、谷歌地图等),每个“餐厅”帖子都应该是相同的。我想到了几种实现这一目标的方法:

修改“single.php”文件以检查帖子是否属于“restaurant”类别,然后相应地输出内容创建一个自定义的“restaurants”帖子类型,然后根据我的具体规范设计模板文件采用这些方法是否会遇到任何明显的问题?从WP开发人员的角度来看,哪个是首选选项?有没有更好的方法来解决这个问题?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

任何情况下都不可能只有专业的,总会有一个地方有一个专业的。此外,我不认为这里有任何错误或正确的答案,而仅仅是偏好的事实

我想问自己最重要的问题是:“我的结构的其余部分会是什么样子?”

如果您只需要在单个视图中区分您的帖子,您的选项一就足够了。使用此选项,可以执行以下操作:

为餐厅帖子创建一个类别。可以这样说Restuarants

而不是在单个数据库中运行大量条件检查。php,创建一个自定义单。php用于特定类别,例如单餐厅。php

使用single template filter 将此单个模板分配给分配给Restaurant 类别

该功能的示例

add_filter( \'single_template\', function ($single_template) {

     global $post;

    if ( in_category( \'Restaurants\' ) ) {
          $single_template = dirname( __FILE__ ) . \'/single-restaurants.php\';
     }
     return $single_template;

}, 10, 3 );
属于Restaurants 类别现在将使用单一餐厅。用于单视图的php

如果您需要更多的控件和完全不同的结构,请使用自定义帖子类型。自定义帖子类型从主查询中排除,但在分类法页面和自定义帖子类型存档页面上除外。所以你可以让你的餐厅帖子与其他帖子完全分开。这里你可以利用pre_get_posts 将自定义帖子类型添加到特定模板的主查询中

以下是将自定义帖子类型添加到主页的示例

add_action( \'pre_get_posts\', function ( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {

        $query->set( \'post_type\', array( \'post\', \'my_post_type\' ) );

    }
});
默认情况下,如果您的帖子类型为“名称”restaurants, 您可以有一个名为single-restaurants.php, 无需额外代码。

您还应该看看Template Hierarchy 有关Wordpress如何选择要使用的模板以及如何操作模板的帮助

结束

相关推荐

Attachment.php与single.php上的_content()行为

我有点麻烦the_content() 处理附件。php。我有一个包含基本循环和简单调用的模板页面the_content() 在循环中显示帖子。场景1用模板文件加载附件页single.php 它将输出图像标签并运行它prepend_attachment.场景2用模板文件加载附件页attachment.php 它不会从the_content(). 我还验证了它没有调用prepend\\u附件或\\u内容过滤器。有人能解释一下这是怎么回事吗?<?php if (have_posts()) : w