【问题标题】:Make *ALL* Wordpress Categories use their Parent Category Template让 *ALL* Wordpress 类别使用其父类别模板
【发布时间】:2011-03-08 09:23:29
【问题描述】:

我想更改默认模板层次结构行为,并强制所有没有自己的类别模板文件的子类别级别页面引用其父类别模板文件。在我的另一篇文章中,Richard M. gave an excellent answer 解决了单个子类别的问题。有谁知道如何抽象它?

function myTemplateSelect()
{
    if (is_category()) {
        if (is_category(get_cat_id('projects')) || cat_is_ancestor_of(get_cat_id('projects'), get_query_var('cat'))) {
            load_template(TEMPLATEPATH . '/category-projects.php');
            exit;
        }
    }
}

add_action('template_redirect', 'myTemplateSelect');

提前致谢。

【问题讨论】:

    标签: wordpress templates hierarchy


    【解决方案1】:
    /**
     * Iterate up current category hierarchy until a template is found.
     * 
     * @link http://stackoverflow.com/a/3120150/247223
     */ 
    function so_3119961_load_cat_parent_template( $template ) {
        if ( basename( $template ) === 'category.php' ) { // No custom template for this specific term, let's find it's parent
            $term = get_queried_object();
    
            while ( $term->parent ) {
                $term = get_category( $term->parent );
    
                if ( ! $term || is_wp_error( $term ) )
                    break; // No valid parent
    
                if ( $_template = locate_template( "category-{$term->slug}.php" ) ) {
                    // Found ya! Let's override $template and get outta here
                    $template = $_template;
                    break;
                }
            }
        }
    
        return $template;
    }
    
    add_filter( 'category_template', 'so_3119961_load_cat_parent_template' );
    

    这会向上循环父层次结构,直到找到直接模板。

    【讨论】:

    • 我刚刚尝试过,但无法正常工作。你介意仔细检查一下吗?
    • TEMPLATEPATH 而不是TEMPLATE_PATH
    • 对于在子主题functions.php中使用此功能的人,将TEMPLATEPATH替换为get_stylesheet_directory()
    • 谢谢,这有帮助!
    【解决方案2】:

    我想知道如何对等级分类法做同样的事情。 TheDeadMedic 的答案似乎在这种情况下也可以通过一些调整:

    function load_tax_parent_template() {
        global $wp_query;
    
        if (!$wp_query->is_tax)
            return true; // saves a bit of nesting
    
        // get current category object
        $tax = $wp_query->get_queried_object();
    
        // trace back the parent hierarchy and locate a template
        while ($tax && !is_wp_error($tax)) {
            $template = STYLESHEETPATH . "/taxonomy-{$tax->slug}.php";
    
            if (file_exists($template)) {
                load_template($template);
                exit;
            }
    
            $tax = $tax->parent ? get_term($tax->parent, $tax->taxonomy) : false;
        }
    }
    add_action('template_redirect', 'load_tax_parent_template');
    

    【讨论】:

      【解决方案3】:

      TEMPLATEPATH 变量可能不适用于子主题 - 在父主题文件夹中查找。 请改用 STYLESHEETPATH。例如

      $template = STYLESHEETPATH . "/category-{$cat->slug}.php";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多