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

How to name WordPress template for category AND custom taxonomy

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

我想在类别为 "flora" 且位置为 "south-america" 时加载不同的模板,因此我将我的模板命名为 category-flora-taxonomy-location-south-africa.php.

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

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 是否支持在这样的模板名称中混合使用类别和自定义分类法,还是我必须显式加载我的模板?如果是这种情况,有什么方法可以做到这一点?

该规则不是 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;
}

对于存档页面,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;
});