Использование другого шаблона в пользовательских таксономии для одностраничных страниц архива

У меня есть 2 пользовательских таксономии, каждая из которых имеет ряд условий:

tax1 term1_1 term1_2 tax2 term2_1 term2_2 term2_3 

Я стараюсь, чтобы каждая таксономия использовала другой файл шаблона для каждой его одностраничной страницы архива. IE term1_1 and term1_2 используют один шаблон, а term2_1 - 3 используют второй. Конечно, я могу просто загружать разные php-файлы из основного файла archive.php но я хотел бы знать, есть ли способ сделать это в рамках стандартной иерархии шаблонов.

Насколько я могу судить, таксономия-tax1.php не работает для этого (если я не ругаюсь по-королевски)

Я бы перехватил загрузчик template_redirect в template_redirect :

 function wpse53892_taxonomy_template_redirect() { // code goes here } add_action( 'template_redirect', 'wpse53892_taxonomy_template_redirect' ); 

Затем вы можете проверить, является ли запрос пользовательской таксономией:

 if ( is_tax() ) { // This query is a custom taxonomy } 

Затем получите объект term и выясните, имеет ли он родителя:

 // 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; {} 

Итак, все вместе:

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

Проверьте иерархию шаблонов WordPress. Как вы можете видеть, вы можете использовать схему taxonomy-$taxonomy-$term.php чтобы указать шаблон для конкретной таксономии и срока. В вашем случае это будет taxonomy-tax1-term1_1.php и т. Д.

Измените условные обозначения для целевой страницы архива. Я бы использовал template_include следующим образом:

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

Я бы НЕ использовал перенаправление шаблонов, как советовал ведущий разработчик Марк Джаквит.