サポート » 使い方全般 » カスタム分類内容を全て出力し、選択したものだけクラスを付与したい

  • 解決済 spicablue

    (@spicablue)


    カスタム投稿で、複数のカスタム分類(以下カテゴリ)を関連づけています。

    wp_list_categories を用いてすべてのカテゴリを出力し、
    選択されたカテゴリの装飾を行いたいため
    current_categoryパラメータでcurrent-catクラスを付与したいのですが、
    current_categoryには複数のIDを指定することはできないのでしょうか?

    excludeなどと同じように、
    カンマ区切りなどで入れてみましたが、最初に指定したIDしかクラスは出力されませんでした。

    使用箇所は記事のシングルページで、
    実際には記事のIDを取得して、current_categoryに入れたいと考えています。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 spicablue

    (@spicablue)

    この方法での解決はしませんでしたが、
    項目を全出力し、選択したものだけクラス付与することができました。

    カスタム分類ではなく、カスタムフィールドを使用しました。

    <dt>イメージ</dt>
        <dd>
          <ul class="clearfix">
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'フェミニン':echo ' current-cat';break;}} ?>">フェミニン</li>
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'エレガンス':echo ' current-cat';break;}} ?>">エレガンス</li>
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'グラマラス':echo ' current-cat';break;}} ?>">グラマラス</li>
            <li class="clear<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'ガーリー':echo ' current-cat';break;}} ?>">ガーリー</li>
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'クール':echo ' current-cat';break;}} ?>">クール</li>
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'ナチュラル':echo ' current-cat';break;}} ?>">ナチュラル</li>
            <li class="clear<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'カジュアル':echo ' current-cat';break;}} ?>">カジュアル</li>
            <li class="<?php $images = (array)get_post_meta($post->ID,'イメージ',false);foreach ($images as $image) {switch ($image) {case 'モード':echo ' current-cat';break;}} ?>">モード</li>
          </ul>
        </dd>

    (listをフロートさせ、3つごとにclearさせています)

    非常に冗長なソースになりましたが、このような方法もあるということでアップいたします。

    こういう書き方もできました。

    single.php

    <?php while ( have_posts() ) : the_post(); ?>
    	<?php
    	// カスタム分類名
    	$taxonomy = 'hair';
    
    	// パラメータ
    	$args = array(
    		// 投稿記事がないタームも取得
    		'hide_empty' => false
    	);
    
    	// カスタム分類のタームのリストを取得
    	$terms = get_terms( $taxonomy , $args );
    
    	if ( count( $terms ) != 0 ) {
    		 echo '<ul>';
    
    		 // タームのリスト $terms を $term に格納してループ
    		 foreach ( $terms as $term ) {
    			// 投稿でタームのスラッグを選択していれば、current-cat付与
    			if ( is_object_in_term( get_the_ID(), $taxonomy, $term->slug ) ) {
    				echo '<li class="current-cat">';
    			}else {
    				echo '<li>';
    			}
    
    			// タームの名称を出力
    			echo $term->name;
    			echo '</li>';
    		 }
    		 echo '</ul>';
    	}
    	?>
    <?php endwhile; ?>

    トピック投稿者 spicablue

    (@spicablue)

    返事が遅くなり、失礼いたしました。
    そして、ありがとうございます!

    とても勉強になりました!
    お恥ずかしいながら、PHPの勉強をあまりしていないもので、
    使用したことのあるコードならなんとか読めるのですが、
    自分で組み合わせるまでは、なかなか難しく…

    次回以降の参考にさせていただきますね。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタム分類内容を全て出力し、選択したものだけクラスを付与したい」には新たに返信することはできません。