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;
}
}
}
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.