この実装、面倒なら代行します
記事一覧ページのサイドバーとかにカテゴリ一覧やタグ一覧を表示して、そのカテゴリorタグによって色を変えたいことありますよね。
そのためには一覧のli要素にカテゴリorタグのスラッグ名つきのクラスを付与する必要があります。
そこで今回は、wp_list_categoriesでカテゴリリストを取得してそのli要素にスラッグ名つきのクラスを付与する方法のご紹介です。
まず表示側は以下のように記述します。
<ul> <li class="cat-item <?php if ( is_category( "parent-cat" ) ) { echo 'current-cat'; } ?>"><a href="<?php echo esc_url( home_url( '/' ) ); ?>parent-cat/">すべて</a></li> <?php $args = array( 'child_of' => get_category_by_slug( 'parent-cat' )->cat_ID, 'title_li' => '' ); wp_list_categories( $args ); ?> </ul>
ここでは、カテゴリ名 =’parent-cat’の子カテゴリを取得してます。
「すべて」っていうタグをli要素の最初に入れて、親カテゴリparent-catが選択されたときに、’current-cat’というクラスを手動でつけます。
‘current-cat’は wp_list_categories関数で選択状態のカテゴリに自動で付与してくれるクラスです。
これで出力側htmlは完成。
次に、テーマのfunctions.phpに以下を追記して、wp_list_categoriesにフックをかけます。
function add_slug_class_to_li( $output, $args ) { $regex = '/<li class="cat-item cat-item-(\d+)[^"]*/'; $taxonomy = isset( $args['taxonomy'] ) && taxonomy_exists( $args['taxonomy'] ) ? $args['taxonomy'] : 'category'; preg_match_all( $regex, $output, $m ); if ( ! empty( $m[1] ) ) { $replace = array(); foreach ( $m[1] as $term_id ) { $term = get_term( $term_id, $taxonomy ); if ( $term && ! is_wp_error( $term ) ) { $replace[ '/<li class="cat-item cat-item-' . $term_id . '("| )/' ] = '<li class="cat-item cat-item-' . $term_id . ' cat-item-' . esc_attr( $term->slug ) . '$1'; } } $output = preg_replace( array_keys( $replace ), $replace, $output ); } return $output; } add_filter( 'wp_list_categories', 'add_slug_class_to_li', 10, 2 );
これで、各カテゴリ(orタグorターム)のli要素に cat-item-‘スラッグ名’ というクラスを付与してくれます。
あとはCSSで色付けすれば完成です。こんな感じ。
/* wp_list_categoriesが出力する標準クラスの非選択状態 */ .cat-item a{ border:2px solid #55E0A2; color:#55E0A2; font-size:0.9rem; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; padding:3px 10px; width:100%; display:block; padding:5px 10px; } /* wp_list_categoriesが出力する標準クラスの選択状態 */ .cat-item.current-cat a,.cat-item a:hover{ background-color:#55E0A2; color:#FFFFFF; } /* child-catというカテゴリの非選択状態 */ .cat-item-child-cat a{ border:2px solid #ff5362; color:#ff5362; } /* child-catというカテゴリの選択状態 */ .cat-item-child-cat.current-cat a,.cat-item-child-cat a:hover{ background-color:#ff5362; color:#FFFFFF; }
けっこう使えると思います。
現在あなたが利用されているWordPressテーマを活かしたまま、このページの事例を解決できるWordPressテーマを、子テーマとして購入できます。
この子テーマを有効化するだけで、現在お使いのデザインテーマにこの事例解決の機能が自動付与されます。
デザインが入っていないため、一般より格段に低い価格(事例の難易度により200円~1.3万円)です。
※ テーマは買い切りです
※ 自由に改変してお使いいただいて構いません
※ すでに子テーマでサイト運用されている方は、当該子テーマをマージしてください
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。