時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【解説】wp_list_categoriesのクラスにスラッグ付与【WordPress】

記事内に広告を含みます

パソ君
パソ君

・wp_list_categoriesのクラスにスラッグ付与するには?

こんな疑問にお答えします。

カテゴリーリストやターム一覧を出したい時に、wp_list_categoriesを使うときありますよね。

デザインによっては、出力された特定ターム部分のみ色を変えたい場合もあるかと。

ただデフォルトのまま出力しちゃうと、その指定は難しめ。

ただあるコードを記述すれば、スラッグがクラス名に付与されるため、指定しやすくなるんですよね。

ジト
ジト

簡単にできるよ!

ということで、この記事では「wp_list_categoriesのクラスにスラッグ付与」について解説していきます!

この記事でわかること

・wp_list_categoriesのクラスにスラッグ付与
・wp_list_categoriesのクラスにスラッグ付与【特定タクソノミー】
・wp_list_categoriesのクラスにスラッグ付与【複数のタクソノミー】

【解説】wp_list_categoriesのクラスにスラッグ付与【WordPress】

  1. 通常のコード
  2. クラス名にスラッグを付与するコード

順に見ていきましょう。

➀:通常のコード

通常のコードがこちら。

<ul>
  <?php wp_list_categories(); ?>
</ul>

実際にHTMLに表示されるコードがこちら↓

<ul>
  <li class="cat-item cat-item-1"><a href="#">HTML</a></li>
  <li class="cat-item cat-item-2"><a href="#">CSS</a></li>
  <li class="cat-item cat-item-3"><a href="#">JavaScript</a></li>
  <li class="cat-item cat-item-4"><a href="#">WordPress</a></li>
</ul>

これだと特定のカテゴリーに対して色を変えたいとなったとき、指定が難しいです。

例えば「JavaScript」という文字の色を変えたいとします。
「cat-item-3」クラスを指定して色を変えても、もし順番が変わったら、違うカテゴリーに対して適用されちゃいますよね。

特定カテゴリーに対して、スラッグをクラスに付与すれば、この問題は解決できます。

スラッグに対してCSSを記述すれば、順番が変わろうとも関係ないですからね。

➁:クラス名にスラッグを付与するコード

クラス名にスラッグを付与するコードがこちら。functions.phpに記述します。

function add_cat_slug_class( $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_cat_slug_class', 10, 2 );

実際に表示されるコードがこちら↓

<ul>
  <li class="cat-item cat-item-1 cat-item-html"><a href="#">HTML</a></li>
  <li class="cat-item cat-item-2 cat-item-css"><a href="#">CSS</a></li>
  <li class="cat-item cat-item-3 cat-item-javascript"><a href="#">JavaScript</a></li>
  <li class="cat-item cat-item-4 cat-item-wordpress"><a href="#">WordPress</a></li>
</ul>

クラス名に「cat-item-スラッグ名」が付与されます。

この場合「JavaScript」という文字の色を変えたいとします。
「cat-item-javascript」クラスに対して色を指定すれば、順番が変わったとしても、「JavaScript」に対して適用されますよね。

これで特定部分に対して適用さすことができました。

categoryではなく、特定タクソノミーに対して指定したい場合

3行目の「タクソノミー名」の部分に、指定したいタクソノミーを記述しましょう。

$taxonomy = isset( $args['taxonomy'] ) && taxonomy_exists( $args['taxonomy'] ) ? $args['taxonomy'] : 'タクソノミー名';

例として「workというカスタム投稿タイプのwork_catというタクソノミーの場合」を挙げてみます。

その場合は3行目部分を下記に変えればOK。

$taxonomy = isset( $args['taxonomy'] ) && taxonomy_exists( $args['taxonomy'] ) ? $args['taxonomy'] : 'work_cat';

出力は下記の感じで↓

<ul>
  <?php wp_list_categories( array(
      'taxonomy' => 'work_cat',
      'title_li' => '',
  ) ); ?>
</ul>

複数のタクソノミーに対して指定する場合

catogoryだけでなく、work_catというタクソノミーに対しても「wp_list_categoriesのクラスにスラッグ付与したい」場合もあるはず。

その場合は下記のように記述すればOK。

function add_taxonomy_slug_class( $output, $args ) {
  $regex = '/<li class="cat-item cat-item-([\d]+)[^"]*">/';
  
  // タクソノミーのスラッグを指定する配列
  $taxonomies = array('category', 'work_cat');
  
  // カテゴリーのリストのHTMLからカテゴリーIDを取得する
  preg_match_all( $regex, $output, $m );
  
  foreach ($taxonomies as $taxonomy) {
    if ( isset( $args['taxonomy'] ) && $args['taxonomy'] == $taxonomy && !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_taxonomy_slug_class', 10, 2 );

下記部分に複数のタクソノミーを追加していきます。

$taxonomies = array('category', 'work_cat');

【解説】wp_list_categoriesのクラスにスラッグ付与【WordPress】:まとめ

  • 通常の場合、特定のカテゴリーに対しての指定が難しい。順番が変わると適用されないため。
  • functions.phpにてクラス名にスラッグを付与させる
  • スラッグのクラス名に対して指定すれば、順番が変わっても適用される
ジト
ジト

wp_list_categoriesのクラスにスラッグ付与したい場合は使ってみよう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA