Usando una plantilla diferente por taxonomías personalizadas para páginas de archivo de un solo término

2

Tengo 2 taxonomías personalizadas, cada una con varios términos:

tax1
  term1_1
  term1_2
tax2
  term2_1
  term2_2
  term2_3

Estoy intentando que cada taxonomía utilice un archivo de plantilla diferente para cada una de sus páginas de archivo de un solo término. ES DECIR. term1_1 and term1_2 usa una plantilla, mientras que term2_1 - 3 usa una segunda plantilla. Por supuesto, puedo cargar diferentes archivos php condicionalmente del archivo principal archive.php , pero me gustaría saber si hay una forma de hacerlo dentro de la jerarquía de plantillas estándar.

Por lo que puedo decir, taxonomy-tax1.php no funciona para esto (a menos que lo esté fastidiando)

    
pregunta Zach Lysobey 01.06.2012 - 21:01

3 respuestas

4

Interceptaría el cargador de plantillas en template_redirect :

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

Luego, verificará si la consulta es una taxonomía personalizada:

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

A continuación, obtenga el término objeto y averigüe si tiene un padre:

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

Entonces, juntándolo todo:

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' );
    
respondido por el Chip Bennett 11.12.2012 - 22:30
2

Compruebe WordPress Jerarquía de plantillas . Como puede ver, puede usar el patrón taxonomy-$taxonomy-$term.php para especificar la plantilla para una taxonomía y un término específicos. En tu caso será taxonomy-tax1-term1_1.php , etc.

    
respondido por el Eugene Manuilov 01.06.2012 - 21:16
0

Modifique los condicionales para orientar su página de archivo. Yo usaría template_include así:

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

No NO usar la redirección de plantilla como se recomienda por el desarrollador líder Mark Jaquith.

    
respondido por el Dev 12.09.2017 - 14:01

Lea otras preguntas en las etiquetas