web-dev-qa-db-fra.com

Comment obtenir une liste de noms de termes du type de message personnalisé im actuellement dans single.php

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_byget_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>
1
Lucas Santos

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).

Voici comment fonctionne la fonction:

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: '&colon; &nbsp; &nbsp;'

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( '&raquo;&nbsp;&nbsp;' )

Et ça va marcher

$args = [
    'display_tax_name' => true,
    'hierarchical' => false,
    'taxonomy_sep' => html_entity_decode( '&raquo;&nbsp;&nbsp;' ) 
] 

La fonction

function get_taxonomies_terms_links( $args = '' ){
    global $post;

    $defaults = [
        'before'            => '', 
        'sep'               => '', 
        'after'             => '',
        'display_tax_name'  => false,
        'taxonomy_sep'      => '&colon; &nbsp; &nbsp;',
        '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( '&raquo;&nbsp;&nbsp;' ) ); ?>
</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( '&raquo;&nbsp;&nbsp;' ) 
            ],
        );
    ?>
</span>
3
Pieter Goosen

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.

0
Rarst