Obtener parte de la plantilla en función del término de taxonomía personalizada

2

Tengo un tipo de publicación personalizada y estoy tratando de llamar diferentes variaciones de la navegación basadas en la babosa de taxonomía personalizada. Lo he hecho con bastante facilidad con las publicaciones normales, como por ejemplo:

<?php 
    if ( is_category( 'mixers' )) {
        include (TEMPLATEPATH.'/nav-mixers.php');
    } elseif ( is_category( 'monitors' )) {
        include (TEMPLATEPATH.'/nav-monitors.php' );
    } elseif ( is_category( 'speakers' )) {
        include (TEMPLATEPATH.'nav-speakers.php');
    }
?>

Sin embargo, esto está resultando difícil para un tipo de publicación personalizada. Siento que estoy cerca, pero necesito ayuda ahora. Aquí es donde estoy actualmente.

<?php
    $terms = get_the_terms( $post->id, 'prodcat' ); // get an array of all the terms as objects.
    $terms_slugs = array();
        foreach( $terms as $term ) {
            $terms_slugs[] = $term->slug; // save the slugs in an array
        }
    if( $terms ) :
       get_template_part( 'nav', slug );
    else :
       get_template_part( 'nav', 'home' );
    endif;
?>

Cualquier ayuda es muy apreciada!

    
pregunta kristina childs 31.07.2013 - 20:32

3 respuestas

2

Bueno, tomó una sesión de trabajo de 24 horas para que me volviera lo suficientemente loca como para averiguarlo. Tuve que pasar tanto la identificación del correo como el nombre de la taxonomía. Todo lo que había intentado hasta que esto hizo una o la otra. facepalm

<?php

    $terms = get_the_terms( $post->id, 'prodcat', array( 'parent' => 0 ) ); 
    $terms_slugs = array();
    foreach( $terms as $term ) {
        $terms_slugs[] = $term->slug; 
    }

    if( !empty($terms_slugs) ) :
      get_template_part( 'nav', array_pop($terms_slugs) );
    else :
      get_template_part( 'nav', 'home' );
    endif;
?>

¡WOO!

    
respondido por el kristina childs 01.08.2013 - 18:11
2

Para recorrer todas las barras de una lista de términos, simplemente llame a get_the_terms() y saque solo las barras:

$slugs = wp_list_pluck( get_the_terms( get_the_ID(), 'prodcat' ), 'slug' );

Luego debes verificar si obtuviste cualquiera resultados:

if ( ! empty( $slugs ) )

El problema que veo surgir es que obtuviste un montón de slugs a cambio (a menos que hayas restringido la caja de administración de metadatos para permitir solo un término).

Luego tendría que decidir sobre algunos criterios personalizados qué menú de navegación desea tener y extraerlo de la lista de $slugs :

// Decide which slug fits and then determine the key:
$key = 0;
get_template_part( 'nav', $slugs[ $key ] );
    
respondido por el kaiser 31.07.2013 - 20:58
2

La "bala de taxonomía personalizada", en su caso, sería prodcat , pero en función de su código, supongo que se refiere al término término individual.

Ahora, get_the_terms() devolverá todos los términos asignados a la publicación, pero solo puede cargar una plantilla, por lo que tendrá que determinar qué término slug usar si hay más de una. No sé cómo piensas decidir eso, pero esto cargará una plantilla basada en una de las babosas, de todos modos.

$terms = get_the_terms( $post->id, 'post_tag' ); // get an array of all the terms as objects.
$terms_slugs = array();
foreach( $terms as $term ) {
    $terms_slugs[] = $term->slug; // save the slugs in an array
}

if( !empty($terms_slugs) ) :
  get_template_part( 'nav', array_pop($terms_slugs) );
else :
  get_template_part( 'nav', 'home' );
endif;

Pero ni siquiera estoy seguro de que necesites el foreach en absoluto:

// get an array of all the terms as objects.
$terms = get_the_terms( $post->id, 'post_tag' );
if ( ! empty( $terms ) ) :
    $terms = array_pop( $terms );
    get_template_part( 'nav', $terms->slug );
else :
    get_template_part( 'nav', 'home' );
endif;
    
respondido por el s_ha_dum 31.07.2013 - 20:53