J'ai 2 taxonomies personnalisées, chacune avec un certain nombre de termes:
tax1
term1_1
term1_2
tax2
term2_1
term2_2
term2_3
J'essaie de faire en sorte que chaque taxonomie utilise un fichier de modèle différent pour chacune de ses pages d'archive à terme unique. C'EST À DIRE. term1_1 and term1_2
utilise un modèle, alors que term2_1 - 3
utilise un second. Je peux bien sûr simplement charger différents fichiers php conditionnellement à partir du fichier archive.php
principal - mais j'aimerais savoir s'il existe un moyen de le faire dans la hiérarchie des modèles standard.
Autant que je sache, taxonomy-tax1.php ne fonctionne pas pour ça (sauf si je déconne royalement)
J'intercepterais le chargeur de templates à template_redirect
:
function wpse53892_taxonomy_template_redirect() {
// code goes here
}
add_action( 'template_redirect', 'wpse53892_taxonomy_template_redirect' );
Ensuite, vous devriez vérifier si la requête est une taxonomie personnalisée:
if ( is_tax() ) {
// This query is a custom taxonomy
}
Ensuite, récupérez le terme objet et voyez s'il a un parent:
// Get the queried term
$term = get_queried_object();
// Determine if term has a parent;
// I *think* this will work; if not see below
if ( 0 != $term->parent ) {
// Tell WordPress to use the parent template
$parent = get_term( $term->parent );
// Load parent taxonomy template
get_query_template( 'taxonomy', 'taxonomy-' . $term->taxonomy . '-' . $parent->slug . 'php' );
}
// If above doesn't work, this should:
$term_object = get_term( $term->ID );
if ( 0 != $term_object->parent; {}
Alors, tout mettre ensemble:
function wpse53892_taxonomy_template_redirect() {
// Only modify custom taxonomy template redirect
if ( is_tax() ) {
// Get the queried term
$term = get_queried_object();
// Determine if term has a parent;
// I *think* this will work; if not see above
if ( 0 != $term->parent ) {
// Tell WordPress to use the parent template
$parent = get_term( $term->parent );
// Load parent taxonomy template
get_query_template( 'taxonomy', 'taxonomy-' . $term->taxonomy . '-' . $parent->slug . 'php' );
}
}
}
add_action( 'template_redirect', 'wpse53892_taxonomy_template_redirect' );
Vérifiez WordPress Hiérarchie des modèles . Comme vous pouvez le constater, vous pouvez utiliser le modèle taxonomy-$taxonomy-$term.php
pour spécifier un modèle pour une taxonomie et un terme spécifiques. Dans votre cas, ce sera taxonomy-tax1-term1_1.php
, etc.
Modifiez les conditions pour cibler votre page d'archive. J'utiliserais template_include comme ceci:
add_filter( 'template_include', 'tax_term_template', 99 );
function tax_term_template( $template ) {
if ( "add your conditional here" ) {
$new_template = locate_template( array( 'tax_term.php' ) );
if ( '' != $new_template ) {
return $new_template;
}
}
return $template;
}
Je NE PAS utiliser le modèle de redirection comme conseillé par le développeur en chef Mark Jaquith.