web-dev-qa-db-fra.com

Modèle d'archive pour les termes de taxonomie

J'ai enregistré un type de poste personnalisé [équipement] et une taxonomie de [type_équipement] dans la taxonomie J'ai les catégories parent et enfant. Par exemple:

Équipement (type de poste personnalisé)

Types d'équipement (taxonomie)

Caméras (terme parent)

  • Caméra A (terme enfant)

  • Caméra b

Ce que je voudrais créer, c’est bien une page d’archive pour les termes de taxonomie. Ainsi, lorsque "Caméras" ou "Caméra A" est sélectionné, il affiche 12 messages avec le titre et l'image sélectionnée (liens vers un seul message), ainsi qu'une certaine pagination.

J'ai essayé une requête standard WP et une boucle, qui finissent toujours par afficher toutes les publications de taxonomies dans tous les termes.

J'ai actuellement un modèle taxonomy-equipment_types.php configuré pour gérer la requête.

3
user1833715

Je veux documenter ceci parce que je viens de trouver la réponse récemment.

Le problème de la taxonomie est que la plupart des développeurs ont l’esprit d’attendre que la taxonomie soit visible dans l’URL post_type de:

http://hostname/post_type/taxonomy_term

Au lieu de cela, vous allez trouver l'URL dans:

http://hostname/taxonomy_slug/taxonomy_term

Cela signifie que nous créons souvent le modèle correctement as

taxonomy-taxonomy_slug-taxonomy_term.php

Mais la bonne façon de l’utiliser est de l’attendre dans l’url

http://hostname/taxonomy_slug/taxonomy_term

To afficher l'URL correcte pour la taxonomie, nous pouvons utiliser

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

Et testez où que le lien pointe.

3
Franz Noel

La hiérarchie de modèles WordPress fournit le fichier de modèle exact dont vous avez besoin: taxonomy-{taxonomy}-{term}.php .

Ainsi, pour créer un modèle personnalisé pour le terme cameras de la taxonomie equipment_types, vous devez créer un fichier nommé taxonomy-equipment_types-cameras.php.

(Notez que vous pouvez également créer un fichier modèle pour le taxonomie lui-même; omettez simplement le {term} slug: taxonomy-{taxonomy}.php ou taxonomy-equipment_types.php dans votre cas.)

Vous pouvez conditionnellement exporter le contenu en fonction de la hiérarchie en recherchant le terme parent, via les propriétés de l'objet renvoyées par get_term() , ou le terme enfants, via get_term_children() .

1
Chip Bennett

J'ai eu un problème similaire. Le problème avec les réponses ci-dessus est qu'elles exigent toutes de spécifier le CPT, la taxonomie ou le terme.

Si - comme vous l'avez indiqué - vous souhaitez récupérer cela dynamiquement en fonction de la page CPT sur laquelle l'utilisateur se trouve, vous pouvez essayer ce qui suit (ce qui fonctionne pour moi), qui affiche toutes les taxonomies pour le type de publication personnalisé actuel.

( originaire de ce post avec l'aide de GhostToast )

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

  <ul>

<? // Start taxonomy term archives query
$post_type = get_post_type(); // find out CPT name
$taxonomies = get_object_taxonomies($post_type); // Find taxonomies
if($taxonomies){
foreach($taxonomies as $taxonomy){
// only want hierarchial -- no tags please
if(is_taxonomy_hierarchical($taxonomy)){

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

 foreach ( $terms as $term ) {  


// example output below ?>

<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; //you can add this in admin ?> - click to view more</a>
            </div>
 </li>
        <?  

   }
 }
}
}?>

     </ul>


<?php wp_reset_query(); ?>

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

 <?php get_footer(); ?>

Enregistrez ce qui précède dans un fichier appelé quelque chose comme archive-mycpt.php, puis ajoutez-le dans archive.php après l’appel d’en-tête;

<?php get_header(); ?>

<?php  // is this one of our CPT ? If so, direct to custom archive page 
  if ( is_custom_post_type() ){ 
include (TEMPLATEPATH . '/archive-mycpt.php'); 

        // if not continue...

    } else {  ?>

               <!-- archive.php content   -->

   <? } ?>
0
Sol