将子类别的主题模板添加到模板层次结构中

时间:2016-07-26 作者:pagol

在我的网站中,我有许多类别和子类别(子类别)

说像我的一个类别名称

Printing
-4 color
-2 color
-offset print

访问时我想要的示例4 color 类别页面将显示所有4 color 使用特定模板分类帖子。我尝试了很多代码,但实际上并没有给我完美的结果。贝娄是一个使用它是很好的工作,但现在的问题是它也对其他类别的儿童的影响。

add_action(\'template_redirect\', \'load_category_tree_template\');
function load_category_tree_template() {
        if (is_category() && !is_feed()) {
            // replace \'your-base-category-slug\' with the slug of root category
            $base_tree_cat_id = get_cat_id(\'printing-products\'); 
                // get current category id
            $catid = get_query_var(\'cat\'); 

            if (is_category($base_tree_cat_id) || cat_is_ancestor_of($base_tree_cat_id, $catid)) {
                load_template(STYLESHEETPATH . \'category-printing.php\');
                exit;
            }
        }
    }

1 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

不使用template_redirect 加载备用模板,因为您可以破坏任何使用此挂钩以低于您的优先级运行的功能。右钩子是template_include. 这是根据WP首席开发人员之一马克·贾奎斯的说法。https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/

也就是说,使用category_template 在这种情况下过滤。

我是根据我找到的一段代码片段使用此代码的,但没有记录源代码:-(

function wpse_233263_parent_category_hierarchy() {
    $templates = array();
    $category = get_queried_object();

    if ( $category->category_parent != 0 ) {
        $parent = get_category( $category->category_parent );

        if(!empty($parent)) {
            $templates[] = "category-{$parent->slug}-{$category->slug}.php";
            $templates[] = "category-{$parent->slug}.php";
            $templates[] = "category-{$parent->term_id}.php";
        }
    } else {
        // Otherwise use the usual default category template files
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
    }

    $templates[] = \'category.php\';

    return locate_template( $templates );
}

add_filter( \'category_template\', \'wpse_233263_parent_category_hierarchy\' );
它在调用类别模板时激发,如果您在子类别中,则基本上会设置一个模板列表,如果不在子类别中,则会设置默认列表。

在子类别中,可以有一个模板类别:父级\\u slug-child\\u slug。php,如果不存在,则返回父级。调整列表以满足您的需要。

相关推荐

Updating modified templates

我想调整一些。php模板文件在我的WordPress主题中,我知道正确的过程是将相关文件复制到子主题文件夹中并在那里编辑文件,这样我的修改就不会在将来的主题更新中丢失。但这是否意味着我将无法从主题更新中获益,因为我将文件放在了我的子主题文件夹中?这可能不是一件好事,因为主题更新可能添加了一些有用的特性,甚至修复了我最初需要对代码进行调整的问题!这方面的常见解决方案是什么?有人推荐了一款Diff应用程序——这是人们常用的吗?