2つのカスタム分類法があり、それぞれにいくつかの用語があります。
tax1
term1_1
term1_2
tax2
term2_1
term2_2
term2_3
私は、それぞれの分類法がそれぞれの一学期のアーカイブページに異なるテンプレートファイルを使うようにしています。 I.E. term1_1 and term1_2
は1つのテンプレートを使用し、term2_1 - 3
は2番目のテンプレートを使用します。もちろん、メインのarchive.php
ファイルから異なるphpファイルを条件付きでロードすることはできます - しかし、これを標準のテンプレート階層内で行う方法があるかどうか知りたいのですが。
私が言うことができる限りでは、taxonomy-tax1.phpはこれのためにはたらきません(私が忙しくしていない限り)
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
}
次に、オブジェクトという用語を取得し、それに親があるかどうかを調べます。
// 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;
}
私は Lead Developer Mark Jaquithのアドバイスに従ってテンプレートリダイレクト を使用しません。