web-dev-qa-db-ja.com

wp_list_categoriesで現在のカテゴリを強調表示する

wp_list_categoriesを使用して、カスタム分類のすべての用語を表示しています'categories'.

関数はすべての用語を正常に出力していますが、引数で'current_category'1に設定されていても、現在のカテゴリは強調表示されていません。

関数は、私の分類法categoriesの命名規則に従って、taxonomy-categories.phpに出力されています。

それはループ内ではありません、それが理由でしょうか?

更新、ここに私の機能があります:

$args = array(
    'orderby'               => 'term_group',
    'title_li'              =>  NULL,
    'order'                 => 'ASC',
    'hide_empty'            => 1,
    'use_desc_for_title'    => 0,
    'feed'                  => '',
    'hierarchical'          => 1,
    'echo'                  => 1,
    'current_category'      => 1,
    'taxonomy'              => 'categories'
);
echo wp_list_categories($args);

注:これはsingle-{post-type}.phpテンプレートで機能しますが、taxonomy-{taxonomy}.phpテンプレートでは機能しません。

1

これにより、投稿に関連するすべてのカテゴリにcurrent-catクラスが追加されます。

これをfunctions.phpに追加してください

function tax_cat_active( $output, $args ) {

  if(is_single()){
    global $post;

    $terms = get_the_terms( $post->ID, $args['taxonomy'] );
    foreach( $terms as $term )
        if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
            $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
  }

  return $output;
}
add_filter( 'wp_list_categories', 'tax_cat_active', 10, 2 );
0
Howdy_McGee

Howdy_McGeeからの回答で、私にはPHPという通知が表示され、正しく機能しませんでした。 $terms = get_the_terms( $post->ID, $args['taxonomy'] );$terms = get_the_terms( $post->ID, 'taxonomy' );に変更しました$termsが空の場合、追加のPHP警告を抑制するために、投稿に関連する用語があることの確認も追加しました。

function tax_cat_active($output, $args) {
    if (is_single()) {
        global $post;
        $terms = get_the_terms($post->ID, 'category');
        if (!empty($terms)) {
            foreach( $terms as $term )
                if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
                    $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
        }
    }
    return $output;
}
add_filter('wp_list_categories', 'tax_cat_active', 10, 2); 
2
Charlie Stanard