如何为类别和自定义分类法命名WordPress模板

时间:2019-03-25 15:06:39

标签: wordpress templates categories custom-taxonomy

我正在使用自然摄影站点的物种类别和一种称为位置的自定义分类法来捕获照片的拍摄位置。

当类别为“ flora”且位置为“ south-america”时,我想加载其他模板,因此我将模板命名为category-flora-taxonomy-location-south-africa.php。

如果我转到http://mywebsite/species/flora/location/south-africa/,则会加载正确的帖子,但不会加载我的模板。我通过保存永久链接刷新了重新编写规则。我也为模板尝试了以下文件名,结果相同:

category-flora-taxonomy-location-south-africa.php
category-flora-taxonomy_location-south-africa.php
taxonomy-location-south-africa-category-flora.php
taxonomy-location-south-africa_category-flora.php

WordPress是否支持在这样的模板名称中混合类别和自定义分类法,还是我必须显式加载模板?如果是这样,该怎么做?

2 个答案:

答案 0 :(得分:2)

该规则不是WP的一部分,但是我们可以构建它...

在functions.php中添加并调整以下内容:

add_filter( 'taxonomy_template', function ( $template )
{

    // get category and term slugs from post object via get_queried_object()

    $custom_template = 'category-{$category}-taxonomy-{$taxonomy}-{$term}.php';
    $locate_template = locate_template( $custom_template );

    if ( !$locate_template )
        return $template;

    return $template = $locate_template;
}

答案 1 :(得分:0)

对于存档页面,get_queried_object()仅获取类别,而不能获取我也必须检查的自定义分类法。因此,我使用的是全局变量$ category_name和$ location。这是修改后的代码:

add_filter('taxonomy_template', function( $template ){
    global $category_name, $location;
    if ( ($category_name == "flora") && $location == "south-africa" ) {
        $custom_template = 'category-flora-taxonomy-location-south-africa.php';
        $locate_template = locate_template( $custom_template );
    };
    if ( !$locate_template )
        return $template;

    return $template = $locate_template;
});