web-dev-qa-db-fra.com

Ajouter des termes de taxonomie en tant que noms de classe dans le balisage?

J'ai défini un type d'article personnalisé pour "personne" et j'aimerais ajouter des noms de classe au balisage de sortie en fonction des taxonomies correspondant aux noms des équipes. Par exemple, si une personne fait partie des équipes "créative" et "interactive", j'aimerais afficher les éléments suivants:

<div class="person creative interactive">Jane</div>

J'ai trouvé ce fil de discussion sur le forum, mais dans mon cas, je dois afficher les noms de taxonomie dans une instruction echo, car la sortie est définie en tant que fonction. dans mon fichier functions.php.

Voici une version réduite de ce que j'ai créé jusqu'à présent, basée sur le fil de discussion susmentionné et ce fil de débordement de pile :

function display_all_people() {
    // set up arguments for new post query
    $args = array(
        'post_type' => 'people',
        'order' => 'ASC',
        'orderby'    => 'meta_value',
        'meta_key'   => 'last_name'
        );

    $peoplePosts = new WP_Query( $args );
    if ( $peoplePosts->have_posts() ) {
        echo '<div class="people-listing">';
        while ( $peoplePosts->have_posts() ) {
            $peoplePosts->the_post();
            $terms = get_the_terms( $post->ID, 'teams' );

            foreach ($terms as $term) {
                echo '<div class="person' . implode('', $term->slug) . '">';
            }

            echo '<div>More markup for each person listing</div>';
            echo '</div>';
        } 
        echo '</div>';
    } else {
        return '<p>Nothing Here.</p>';
    }
    wp_reset_postdata();
}

Ainsi, j'essaie d'utiliser la fonction implode() pour concaténer les valeurs du tableau (c'est-à-dire les noms de taxonomie "team"), mais cela ne semble pas fonctionner (PHP génère des erreurs.) Toute idée de la manière dont je peux correctement ajouter le les taxonomies comme noms de classe de cette manière? Merci pour toute aide ici.

2
nickpish

Différence la sortie jusqu'à ce que vous ayez une collection prête.

$terms = get_the_terms( $post->ID, 'teams' );

// create a collection with your default item
$classes = array('person');

foreach ($terms as $term) {

    // add items
    $classes[] = $term->slug;

}

// output all the classes together with a space to separate them.
echo '<div class="' . implode(' ', $classes) . '">';

echo '<div>More markup for each person listing</div>';

À L'EXCLUSION

Pour ignorer l'ajout d'un élément:

if( $term->slug !== 'accounting' ) { $classes[] = $term->slug; }

Pour supprimer tous les pommes pourries:

$pros = array('A', 'B', 'C');
$cons = array('C');
$best = array_diff($pros, $cons);
print_r ($best); // A, B

Dans le contexte:

$terms = get_the_terms( $post->ID, 'teams' );

// create a collection with your default item
$classes = array( 'person' );

if ( $terms && ! is_wp_error( $terms ) ) {
    foreach ( $terms as $term ) {
        $classes[] = $term->slug; // add items
    }
}

// remove any specific classes here
$classes = array_diff( $classes, array( 'creative-services' ) );

// output all the classes together with a space to separate them.
echo '<div class="' . implode( ' ', $classes ) . '">';

echo '<div>More markup for each person listing</div>';
3
jgraup