根据分配的类别为帖子提供特定模板

时间:2017-01-30 作者:George Nikolaou

我有以下设置:

三篇帖子:post1, post2, &;post3cat1 &;cat2singe1.php &;single2.php

  • post1post2 分配给cat1
  • post3 已分配给cat2
post1post2 应使用template1post3 应使用template2

我发现了这个插件:https://wordpress.org/plugins/single-post-template/installation/但每一页都是分开的。

有没有办法将帖子模板与类别联系起来?

3 个回复
SO网友:Niels Lange

尼古拉乌,

当我理解你的问题正确时,你想根据你在帖子中使用的类别使用不同的模板,对吗?

如果是这样,那么您只需要一个模板(single.php)和get_the_terms()get_template_part().

<?php

$categories = get_the_terms(get_the_ID(), \'slug\');

if ( in_array(\'cat1\', $categories) ) {
    get_template_part(\'partials/single\', \'1\');
} elseif ( in_array(\'cat2\', $categories) ) {
    get_template_part(\'partials/single\', \'2\');
}

?>
您应该将上面的代码放在循环中。这两个模板文件称为single-1。php和single-2。php,并存储在名为partials的文件夹中。

Sources:

SO网友:Pat J

您可以使用Template Hierarchy 对您有利。如果愿意,可以在主题中为不同类别创建模板文件。

假设您有名为catsdogs. 如果创建一对名为category-cats.phpcategory-dogs.php, 这些文件将用作各自类别的模板。

您还可以在模板文件名中使用类别的ID。所以如果cats is类别#3和dogs 是类别#4,则category-3.phpcategory-4.php 将用于各自的职位。

参考文献Template Hierarchy » Categories
  • Graphical Template Hierarchy
  • SO网友:cjbj

    根据您的问题,我猜您希望在不更改模板(或其名称)的情况下分配模板。有一个过滤器single_template. 它用于拦截WP的标准系统,即为帖子找到模板。您可以将其包含在functions.php 像这样(未经测试):

    function wpse254523_single_template ($single_template) {
         global $post;
         $cat = get_the_category($post->ID);
         if ($cat == \'cat1\' || $cat == \'cat2\')
           $single_template = dirname( __FILE__ ) . \'/single1.php\';
         elseif ($cat == \'cat3\')
           $single_template = dirname( __FILE__ ) . \'/single2.php\';
         return $single_template;
         }
    
    add_filter( \'single_template\', \'wpse254523_single_template\' );