web-dev-qa-db-ja.com

単一用語アーカイブページのカスタム分類法ごとに異なるテンプレートを使用する

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はこれのためにはたらきません(私が忙しくしていない限り)

2
Zach Lysobey

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' );
4
Chip Bennett

WordPress テンプレート階層 を確認してください。ご覧のとおり、パターンtaxonomy-$taxonomy-$term.phpを使用して、特定の分類法と用語のテンプレートを指定できます。あなたの場合はtaxonomy-tax1-term1_1.phpなどです。

2
Eugene Manuilov

アーカイブページをターゲットにするように条件を変更します。私はこのように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のアドバイスに従ってテンプレートリダイレクト を使用しません。

0
Dev