Ok, j'ai donc un type de message personnalisé de "Produits" et une taxonomie personnalisée de "Types". Maintenant, dans la taxonomie des types, j'ai des dizaines de catégories et de sous-catégories attribuées à des types d'articles personnalisés.
Type de poste personnalisé: voiture bleue
Catégories attribuées à voiture: Honda> Accord> LX
Donc, ce que j'essaie de faire, c'est quand je vais dans un type de message personnalisé spécifique single.php tel que "Blue Car", je veux voir toutes les catégories attribuées à "Blue Car" listées comme suit:
Catégories: Honda, Accord, LX
J'ai essayé d'utiliser get_terms_by
get_terms
et wp_list_categories
mais cela ne semble pas fonctionner ou je n'utilise pas certains d'entre eux correctement. Voici ce que j’ai pu me faire savoir s’il existe un meilleur moyen ou un autre moyen de le faire:
<ul>
<?php
//get the current term
$current_term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
//set the args for wp_list_categories
$args = array(
'child_of' => $current_term->term_id,
'taxonomy' => 'types',
'hide_empty' => 1,
'order' => 'ASC',
'show_count' => 1,
'hierarchical' => true,
'depth' => 1,
'title_li' => ''
);
wp_list_categories( $args );
?>
</ul>
SIDENOTE: Cette fonction peut être utilisée même si avoir des publications appartient à une seule taxonomie. Il n'est pas nécessaire que votre publication appartienne à deux taxonomies ou plus appartenant à la même hiérarchie. J'ai rendu cette fonction très flexible
Il m'est toujours difficile d'afficher une liste de catégories ou de termes pour un message si les conditions suivantes sont remplies
Avoir un poste dont les termes appartiennent à deux taxonomies différentes
Utiliser un modèle pour afficher les articles et vous avez des articles dont les termes appartiennent à plus d'une taxonomie
Vous arrivez à une situation où vous devez dupliquer des fonctions, une pour chaque taxonomie. Par exemple, un article appartient aux termes de deux taxonomies, mytax1
et mytax2
. Pour afficher la liste des termes, vous devez faire
echo get_the_term_list( $post->ID, 'mytax1' );
echo get_the_term_list( $post->ID, 'mytax2' );
Cela devient un désordre lorsque le prochain article appartient à la taxonomie par défaut category
Je suis allé écrire une fonction qui combine tout en un, une fonction pour afficher tous les termes de toutes les taxonomies appartenant à une publication, et cette fonction peut être utilisée pour afficher toute taxonomie des taxonomies intégrées (sauf post_format
).
1.) Cette fonction utilise get_the_term_list()
pour afficher la liste des termes; cette fonction utilise donc la même fonctionnalité que get_the_term_list()
.
2.) Doit être utilisé à l'intérieur de la boucle. Cette fonction ne fonctionnera pas en dehors de la boucle
3.) L'ID de publication et le nom de taxonomie sont transmis par défaut à la fonction get_the_term_list()
4.) Voici la liste des arguments
before (chaîne) (facultatif) Texte principal
Par défaut: chaîne vide
sep (chaîne) (facultatif) Chaîne pour séparer les balises
Par défaut: chaîne vide
après (chaîne) (facultatif) Texte de fin
Par défaut: chaîne vide
display_tax_name (bool) (facultatif) Le nom de taxonomie doit-il être affiché devant la liste?.
Par défaut: false
taxonomy_sep (chaîne) (facultatif) Texte utilisé pour séparer le nom de la taxonomie de la liste des termes.
Valeur par défaut:
': '
multi_tax_sep (chaîne) (facultatif) Si la publication contient des termes qui appartiennent à plusieurs taxonomies, le texte utilisé pour séparer les deux listes de termes ou plus
Valeur par défaut:
</br>
hierarchical (bool) (optionnel) La liste devrait-elle afficher des taxonomies hiérarchiques (comme les catégories) ou non (par exemple, des balises post)?
Par défaut: true
5.) Les arguments peuvent être passés sous forme de tableau ou de chaîne à la fonction
6.) Besoins PHP 5.4+
Cela fonctionnera (chaîne)
'display_tax_name=' . true .'&hierarchical=' . false . '&taxonomy_sep=' . html_entity_decode( '» ' )
Et ça va marcher
$args = [
'display_tax_name' => true,
'hierarchical' => false,
'taxonomy_sep' => html_entity_decode( '» ' )
]
function get_taxonomies_terms_links( $args = '' ){
global $post;
$defaults = [
'before' => '',
'sep' => '',
'after' => '',
'display_tax_name' => false,
'taxonomy_sep' => ': ',
'multi_tax_sep' => '</br>',
'hierarchical' => true
];
$args = wp_parse_args( $args, $defaults );
$post_type = $post->post_type;
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
$returned_list = [];
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
if( $args['hierarchical'] == $taxonomy->hierarchical && has_term( '', $taxonomy_slug ) && 'post_format' != $taxonomy_slug ) {
$term_list = get_the_term_list( $post->ID, $taxonomy_slug, $args['before'], $args['sep'], $args['after'] );
if( true == $args['display_tax_name'] ){
$returned_list[] = strtoupper($taxonomy_slug) . $args['taxonomy_sep'] . $term_list;
}else{
$returned_list[] = $term_list;
}
}
}
if( $returned_list ) {
$count = count($returned_list);
if( 1 === $count ) {
return implode( '', $returned_list );
}else{
$multi_list = [];
foreach ( $returned_list as $key=>$value ) {
if (array_key_exists($key + 1, $returned_list)) {
$multi_list[] = $value . $args['multi_tax_sep'];
}else{
$multi_list[] = $value;
}
}
return implode( '', $multi_list );
}
}
}
Exemple d'utilisation dans un modèle pour afficher la liste de termes. Vous pouvez utiliser les caractères de lecture normaux ou les entités HTML conjointement avec html_entity_decode()
et le tableau de caractères
Arguments en tant que chaîne
<span class="cat-links">
<?php echo get_taxonomies_terms_links('sep=, &display_tax_name=' . true .'&taxonomy_sep=' . html_entity_decode( '» ' ) ); ?>
</span>
Arguments en tant que tableau
<span class="cat-links">
<?php
echo get_taxonomies_terms_links(
[
'sep' => ', ',
'display_tax_name' => true,
'taxonomy_sep' => html_entity_decode( '» ' )
],
);
?>
</span>
Les fonctions que vous avez essayées sont pour des termes par eux-mêmes , qui n'existent que sur le site.
Ce que vous recherchez, c'est get_the_terms()
, qui récupère les termes d'une taxonomie spécifique, affectés à un message spécifique.