特定类别的自定义单一模板

时间:2014-11-29 作者:NewUser

为属于特定类别的WordPress帖子创建自定义模板的最佳方式(性能和代码结构)是什么?我意识到你不能只是创造single-catname.php.

到目前为止,我尝试了两种方法来更改模板。但哪一个(或另一个)是最好的?

EDIT:

知道如何将所有子/父等类别包括在内吗?我现在意识到它只显示了主要类别。。。

1. 添加到函数。php

function get_custom_cat_template($single_template) {
   global $post;
   if ( in_category( \'movies\' )) {
      $single_template = dirname( __FILE__ ) . \'/single-movies.php\';
   }
   return $single_template;
} 
add_filter( "single_template", "get_custom_cat_template" ) ;
2. 将以下代码放入单条。php(而不是所有其他代码)并创建single-template.php (使用single.php中的代码)(&;A.custom single-movies.php

<?php        
if(has_term(\'movies\', \'category\', $post)) {      
   get_template_part(\'single-movies\', \'movies\');
} else {
   // use default template file single-template.php
   get_template_part(\'single-template\');
}
?>

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

从我的评论到OP

我的意见是,使用你喜欢的东西。如果有任何性能差异,则将是微小的/无关紧要的。我的首选项,使用过滤器

在我看来,要解决您真正关心的问题,最好的方法是使用父类别ID并从那里开始工作。从这里开始工作将是最不耗费资源的。逆向工程可能会成为一种不必要的资源浪费。

利用get_categories 从给定类别中获取子类别。您可以使用两个参数中的任意一个parentchild_of

parent (整数)

仅显示由其ID标识的类别的直接子类(即仅限子类)的类别。这与“child\\u of”参数不同。此参数没有默认值。[在2.8.4中]

child_of (整数)

显示由ID标识的类别的子类别(即子类别和孙类别)的所有类别。此参数没有默认值。如果使用该参数,则hide\\u empty参数设置为false。

一旦你有了这些,使用wp_list_pluck 从返回的类别数组中获取catID、name或slug字段。此数组将用于检查帖子是否属于这些类别之一。您可以使用has_categoryin_category

这就是如何扩展代码,以确保属于父类别或其子类别的帖子使用给定的模板

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

    $parent     = \'21\'; //Change to your category ID
    $categories = get_categories( \'child_of=\' . $parent );
    $cat_names  = wp_list_pluck( $categories, \'name\' );

    if ( has_category( \'movies\' ) || has_category( $cat_names ) ) {
        $single_template = dirname( __FILE__ ) . \'/single-movies.php\';
    }
    return $single_template;
     
}, PHP_INT_MAX, 2 );

SO网友:Karun

步骤1:创建或复制单个内容。并创建一个新文件。例如:内容yourCategory。phpstep 2:打开单个。php并替换此get_template_part(\'content\',\'single\'); 按以下代码

    if(is_category(\'yourCategory\')){
        get_template_part(\'content\',\'yourCategory\');
    }else{
        get_template_part(\'content\',\'single.php\');
    }
该参数可以是类别ID、类别标题、类别Slug或ID、名称和Slug的数组。

SO网友:Ninda

这是一种方便的方法here 将此代码传递到function.php

// Custom single template by category
// https://halgatewood.com/wordpress-custom-single-templates-by-category

add_filter(\'single_template\', \'check_for_category_single_template\');
function check_for_category_single_template( $t )
{
  foreach( (array) get_the_category() as $cat ) 
  { 
    if ( file_exists(STYLESHEETPATH . "/single-category-{$cat->slug}.php") ) return STYLESHEETPATH . "/single-category-{$cat->slug}.php"; 
    if($cat->parent)
    {
      $cat = get_the_category_by_ID( $cat->parent );
      if ( file_exists(STYLESHEETPATH . "/single-category-{$cat->slug}.php") ) return STYLESHEETPATH . "/single-category-{$cat->slug}.php";
    }
  } 
  return $t;
}
有关更多信息,请查看https://halgatewood.com/wordpress-custom-single-templates-by-category

SO网友:Sam Prasanna
function get_custom_cat_template($single_template) {
   global $post;

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

add_filter( "single_template", "get_custom_cat_template" ) ;
结束

相关推荐

1 post, 2 templates

我想能够呈现两种不同的风格(2个模板)后。例如,假设我有post ID 133,我希望有两个url来访问它,因此它会呈现不同模板应用的位置。洛雷姆。com/render1/133。com/render2/1333,例如。。。或者可能是这样的:洛雷姆。com/post/133和lorem。com/post/133?模板=2您将如何操作?