web-dev-qa-db-ja.com

分類名をマークアップのクラス名として追加しますか?

"person"のカスタム投稿タイプを定義しました。チーム名に対応する分類法に基づいて、出力マークアップにクラス名を追加したいと思います。たとえば、ある人が「クリエイティブ」チームと「インタラクティブ」チームの一員である場合は、次のように出力します。

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

フォーラムで this thread が見つかりましたが、私の場合はechoステートメント内に分類名を出力する必要があります。出力は自分のfunctions.phpファイルで関数として定義されているからです。 。

前述のスレッドと このスタックオーバーフロースレッド に基づいて、これまでに思いついたものを縮小したものがあります。

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

したがって、私はimplode()を使って配列の値(つまり "チーム"分類名)を連結しようとしていますが、うまくいっていないようです(PHPはエラーをスローしています)。このようにクラス名として分類法?ご協力ありがとうございます。

2
nickpish

コレクションの準備ができるまで出力を変えてください。

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

除外

アイテムの追加を無視するには

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

悪いリンゴをすべて削除するには:

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

コンテキストでは:

$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