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.
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.
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()
.
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&h=196&w=285&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 -->
<? } ?>