Plantilla de archivo para términos de taxonomía

7 dic 2012, 20:57:46
Vistas: 21K
Votos: 3

He registrado un tipo de entrada personalizada [equipment] y tengo una taxonomía [equipment_type] dentro de la cual tengo categorías padre e hijo. Por ejemplo:

Equipment (Tipo de entrada personalizada)

Equipment Types (Taxonomía)

Cameras (Término padre)

  • Camera A (Término hijo)

  • Camera B

Lo que me gustaría crear es efectivamente una página de archivo para los términos de taxonomía. Así que cuando se selecciona 'Cameras' o 'Camera A' muestre, digamos, 12 entradas con título e imagen destacada (enlaces a entrada individual) más algo de paginación.

He intentado una consulta y bucle estándar de WP y siempre termina mostrando todas las entradas de taxonomías en todos los términos.

Actualmente tengo una plantilla taxonomy-equipment_types.php configurada para manejar la consulta.

3
Comentarios

Por favor, explica qué quieres decir con Categoría de Taxonomía. Tu pregunta confunde taxonomía y categoría (que es un tipo de taxonomía). ¿Estás diciendo que tienes términos jerárquicos para tu taxonomía personalizada, equipment_type? Además, ¿cameras es un término para la taxonomía equipment_type?

Chip Bennett Chip Bennett
7 dic 2012 21:00:50

Mis disculpas, quizás estoy confundiendo la terminología. Tengo una taxonomía llamada 'equipment_type' y dentro de ella tengo 'cameras', 'lenses', etc... ¿son esos términos?

Son jerárquicos y funcionan como lo harían las categorías en las publicaciones dentro de la configuración estándar de WP.

user1833715 user1833715
7 dic 2012 21:07:36

¡Ah, ahora lo tienes! cameras, lenses, camera-a y camera-b son términos de la taxonomía equipment_type. Los términos camera-a y camera-b son hijos del término cameras.

Chip Bennett Chip Bennett
7 dic 2012 21:45:05
Todas las respuestas a la pregunta 3
0

Quiero documentar esto porque acabo de encontrar la respuesta recientemente.

El problema con las taxonomías es que la mayoría de los desarrolladores tienen la mentalidad de esperar que la taxonomía se vea dentro de la URL del post_type como:

http://hostname/post_type/taxonomy_term

En cambio, vas a encontrar la URL en:

http://hostname/taxonomy_slug/taxonomy_term

Esto significa que a menudo podemos estar creando la plantilla correctamente como

taxonomy-taxonomy_slug-taxonomy_term.php

Pero la forma correcta de usarla es esperarla dentro de la URL

http://hostname/taxonomy_slug/taxonomy_term

Para ver la URL correcta de la taxonomía, podemos usar

get_the_term_list($post->ID,'taxonomy_slug')

Y probar hacia dónde apunta el enlace.

24 jul 2013 04:31:35
1

La Jerarquía de Plantillas de WordPress proporciona el archivo de plantilla exacto que necesitas: taxonomy-{taxonomy}-{term}.php.

Por lo tanto, para crear una plantilla personalizada para el término cameras de la taxonomía equipment_types, deberías crear un archivo llamado taxonomy-equipment_types-cameras.php.

(Nota: también puedes crear un archivo de plantilla para la taxonomía en sí; simplemente omite el slug {term}: taxonomy-{taxonomy}.php, o taxonomy-equipment_types.php en tu caso.)

Puedes mostrar contenido condicionalmente basado en la jerarquía consultando ya sea el término padre, a través de las propiedades del objeto devuelto por get_term(), o los términos hijos, mediante get_term_children().

8 dic 2012 14:39:54
Comentarios

Gracias Chip, pensé que la plantilla de WP proporcionaba lo que necesitaba como sugeriste: taxonomy-equipment_types.php

Creo que donde estoy teniendo dificultades es en averiguar cómo mostrar el contenido/publicaciones basado en los términos seleccionados por el usuario tanto para el padre como para el hijo, cámaras o cámaras-a.

¿Estás sugiriendo que use 'get_term()' para determinar qué contenido/publicaciones deberían mostrarse en el loop?

Soy bastante nuevo en PHP y actualmente estoy aprendiendo a través de Lynda.com. Así que tendré que profundizar un poco más y tratar de entender el proceso.

¿Podrías proporcionar un ejemplo aproximado para ayudarme a entender lo que necesito hacer?

user1833715 user1833715
8 dic 2012 15:10:52
0

Tuve un problema similar. El problema con las respuestas anteriores es que todas requieren que especifiques el CPT, la taxonomía o el término.

Si - como has indicado - deseas recuperar esto dinámicamente dependiendo de en qué página de CPT se encuentre el usuario, puedes probar lo siguiente (que funciona para mí), que muestra todas las taxonomías para el tipo de contenido personalizado actual.

(originalmente de este post con la ayuda de GhostToast)

<?php get_header(); ?>
  <div id="content">
<div id="main">

  <ul>

<? // Iniciar consulta de archivos de términos de taxonomía
$post_type = get_post_type(); // obtener nombre del CPT
$taxonomies = get_object_taxonomies($post_type); // Encontrar taxonomías
if($taxonomies){
foreach($taxonomies as $taxonomy){
// solo queremos jerárquicas -- sin etiquetas por favor
if(is_taxonomy_hierarchical($taxonomy)){

    $terms = get_terms($taxonomy, array(
'orderby'       => 'name', 
'order'         => 'Asc',
'hide_empty'    => true )); 

 foreach ( $terms as $term ) {  


// ejemplo de salida a continuación ?>

<li>

 <h1><a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->name; ?></a></h1>

   <div class="imgBox">

     <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> " title="<? echo $term->name; ?>" >
     <img src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=/library/images/dingy-placeholder.png&amp;h=196&amp;w=285&amp;zc=1" alt="<?php the_title(); ?>" /></a>
   </div>

           <div class="the-excerpt">
            <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->description; //puedes agregar esto en el admin ?> - haz clic para ver más</a>
            </div>
 </li>
        <?  

   }
 }
}
}?>

     </ul>


<?php wp_reset_query(); ?>

     </div> <!-- fin #main -->
   </div> <!-- fin #content -->

 <?php get_footer(); ?>

Guarda el código anterior en un archivo llamado algo como archive-mycpt.php, luego en archive.php agrega esto después de la llamada al header:

<?php get_header(); ?>

<?php  // ¿es este uno de nuestros CPT? Si es así, dirigir a la página de archivo personalizado
  if ( is_custom_post_type() ){ 
include (TEMPLATEPATH . '/archive-mycpt.php'); 

        // si no, continuar...

    } else {  ?>

               <!-- contenido de archive.php   -->

   <? } ?>
27 jul 2013 05:13:40