为属于特定类别的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\');
}
?>
最合适的回答,由SO网友:Pieter Goosen 整理而成
从我的评论到OP
我的意见是,使用你喜欢的东西。如果有任何性能差异,则将是微小的/无关紧要的。我的首选项,使用过滤器
在我看来,要解决您真正关心的问题,最好的方法是使用父类别ID并从那里开始工作。从这里开始工作将是最不耗费资源的。逆向工程可能会成为一种不必要的资源浪费。
利用get_categories
从给定类别中获取子类别。您可以使用两个参数中的任意一个parent
或child_of
parent (整数)
仅显示由其ID标识的类别的直接子类(即仅限子类)的类别。这与“child\\u of”参数不同。此参数没有默认值。[在2.8.4中]
child_of (整数)
显示由ID标识的类别的子类别(即子类别和孙类别)的所有类别。此参数没有默认值。如果使用该参数,则hide\\u empty参数设置为false。
一旦你有了这些,使用wp_list_pluck
从返回的类别数组中获取catID、name或slug字段。此数组将用于检查帖子是否属于这些类别之一。您可以使用has_category
或in_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的数组。