web-dev-qa-db-fra.com

Comment puis-je obtenir l'étiquette actuelle d'une taxonomie?

J'ai donc créé deux taxonomies personnalisées pour ajouter plusieurs catégories à une page/projet. (single-work.php) Le nom par défaut (construit dans la catégorie) est project type et les deux nouveaux sont client et agency.

J'utilise fondamentalement le même code pour les trois, mais je viens de remarquer que ce qu'il fait pour les deux catégories personnalisées consiste essentiellement à lire CHAQUE balise que j'ai ajoutée à différents projets, au lieu d'afficher uniquement la balise sélectionnée pour cette page spécifique.

En d’autres termes, il s’agit simplement d’afficher toutes les balises qui se trouvent dans la zone "Choisissez parmi les balises les plus utilisées". Bien qu'un seul tag ait été sélectionné pour chaque projet.

J'espère que c'était un peu clair :)

Voici le code que j'utilise:

<?php $terms = get_terms( 'portfolio_tags_client' );
    foreach ( $terms as $term ) {
        $term_link = get_term_link( $term );
        if ( is_wp_error( $term_link ) ) {
            continue;
        }
    echo 'Client: <a href="' . esc_url( $term_link ) . '">' . $term->name . '</a>&nbsp;<br />';
    }
?>

Et voici la taxonomie qui en ressort, si cela aide:

register_taxonomy(
    'portfolio_tags_client',  //The name of the taxonomy. Name should be in slug form (must not contain capital letters or spaces). 
    'work', // Post type name
    array(
        'hierarchical'  =>  false,
        'label'         =>  'Clients', // Display name
        'singular_name' =>  'Client',
        'query_var'     =>  true,
        'rewrite'       =>  array(
        'slug'          =>  'client', // This controls the base slug that will display before each term
        'with_front'    =>  false // Don't display the category base before 
        )
    )
);

Est-ce que quelqu'un sait ce que cela pourrait être? J'ai passé beaucoup plus de temps que j'aimerais l'admettre en essayant de résoudre ce problème :)

UPDATE Fixé! Merci beaucoup pour l'aide les gars. J'apprécie vraiment cela. Voici le code final:

<?php $post_tags = get_the_terms(get_the_ID(), 'portfolio_tags_client'); 
    if ($post_tags) {
        foreach($post_tags as $tag) {
        echo 'Client: <a href="'.get_tag_link($tag->term_id).'" title="'.$tag->name.'">'. $tag->name .'</a>&nbsp;<br />';
        }
    }
?>
1
dem0n

Ce que vous recherchez, c'est get_the_terms(). Vous pouvez obtenir des conditions personnalisées pour le message actuel en utilisant le code suivant:

$post_tags = get_the_terms(get_the_ID(), 'portfolio_tags_client'); 
if ($post_tags) { ?>
    <div class="tags-div">
        <h3><?php _e( 'Tags', 'text-domain' ); ?></h3>  
        <div class="post-tags"><?php
            foreach($post_tags as $tag) {
                echo '<a href="'.get_tag_link($tag->term_id).'" title="'.$tag->name.'">'. $tag->name .'</a>'; 
            } ?>
        </div>      
    </div><?php 
}

Cela devrait être utilisé dans votre single.php ou le modèle qui rend le contenu de votre message. get_the_term() lui-même peut être utilisé n’importe où, mais comme vous devez lui transmettre l’ID de la publication, vous devez l’utiliser dans les fichiers de modèle appropriés.

2
Jack Johansson

C'est le comportement attendu de get_terms(). Vous pouvez utiliser wp_get_object_terms() à la place

$terms = wp_get_object_terms( $post->ID, 'portfolio_tags_client' );

Si vous êtes dans la boucle, vous pouvez utiliser ce qui suit

$terms = wp_get_object_terms( get_the_ID(), 'portfolio_tags_client' );
2
kero