it-swarm.com.de

Taxonomiebegriffe als Klassennamen im Markup anhängen?

Ich habe einen benutzerdefinierten Beitragstyp für "Person" definiert und möchte Klassennamen an das Ausgabemarkup anhängen, basierend auf Taxonomien, die Teamnamen entsprechen. Wenn eine Person beispielsweise zu den Teams "Kreativ" und "Interaktiv" gehört, möchte ich Folgendes ausgeben:

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

Ich habe diesen Thread im Forum gefunden , aber in meinem Fall muss ich die Taxonomienamen in einer echo-Anweisung ausgeben, da die Ausgabe als Funktion definiert ist in meiner functions.php Datei.

Hier ist eine verkleinerte Version dessen, was ich bisher auf der Grundlage des oben genannten Threads und dieses Stapelüberlauf-Threads entwickelt habe:

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();
}

Daher versuche ich, mit der Funktion implode() die Werte des Arrays zu verketten (dh die Taxonomienamen "team"), aber es scheint nicht zu funktionieren (PHP wirft Fehler aus.) Irgendeine Idee, wie ich das erfolgreich anhängen kann Taxonomien als Klassennamen auf diese Weise? Vielen Dank für jede Hilfe hier.

2
nickpish

Differenziere die Ausgabe, bis du eine Sammlung fertig hast.

$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>';

OHNE

So ignorieren Sie das Hinzufügen eines Elements:

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

So entfernen Sie alle schlechten Äpfel:

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

Im Zusammenhang:

$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