web-dev-qa-db-fra.com

Ajouter des modèles de thème pour les catégories enfants dans la hiérarchie des modèles

dans mon site, j'ai plusieurs catégories et sous-catégories (catégorie enfant)

dis comme mon nom de catégorie

Impression
- 4 couleurs
- 2 couleurs
- impression offset

Exemple je veux quand visiter 4 couleur page de catégorie, il montrera tous 4 couleurs catégorie post avec modèle particulier. J'ai essayé beaucoup de code, mais ce n'est pas le résultat parfait. ci-dessous est celui qui est utilisé c'est du travail Nice mais maintenant le problème est qu'il affecte également d'autres catégories d'enfants.

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
pagol

N'utilisez pas template_redirect pour charger d'autres modèles car vous pouvez interrompre n'importe quelle fonctionnalité utilisant ce hook pour qu'elle s'exécute avec une priorité inférieure à la vôtre. Le bon crochet est template_include. C'est selon Mark Jaquith, l'un des WP principaux développeurs. https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/

Cela dit, il serait peut-être plus approprié d'utiliser le filtre category_template dans ce cas.

J'utilise ceci, basé sur un extrait de code que j'ai trouvé et qui n'a pas gardé une note de la source :-(

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' );

Il se déclenche lorsqu'un modèle de catégorie est appelé et configure essentiellement une liste de modèles si vous appartenez à une catégorie enfant ou configure la liste par défaut si ce n'est pas le cas.

Dans une catégorie enfant, vous pouvez avoir un modèle category-parent_slug-child_slug.php et, s'il n'existe pas, revient au parent. Tweak la liste pour répondre à vos besoins.

3
Andy Macaulay-Brook