Single.php Класс активной категории

В настоящее время по умолчанию (я полагаю), когда вы находитесь на single.php, WordPress не добавляет класс «Активный» в категорию блога, в котором вы просматриваете одно сообщение, как это было бы для страниц, или если вы находитесь на . У архива также нет этого (если вы их перечислите). Есть ли способ добавить класс «Active» для размещения родительских категорий после их перечисления?

Я перечисляю свои категории и архивы стандартным образом:

<div class="menu-item"> <h4 class="title"><a href="<?php echo get_permalink(15); ?>">Categories</a></h4> <ul> <?php wp_list_categories(array( 'title_li' => '', 'echo' => 1 )); ?> </ul> </div> <div class="menu-item"> <h4 class="title"><a href="<?php echo get_permalink(15); ?>">Archives</a></h4> <ul> <?php wp_get_archives('type=monthly&limit=12'); ?> </ul> </div> 

Просто для уточнения; Когда вы находитесь в категории, он добавит класс current-cat в элемент списка, но когда вы находитесь на одном из отдельных сообщений, он не добавляет в категорию каких-либо классов, чтобы показать, что сообщение принадлежит Это.

Это структура permalink, которую я использую (если это имеет значение):

 /blog/%year%/%monthnum%/%day%/%postname%/ 

Solutions Collecting From Web of "Single.php Класс активной категории"

Как отмечает vancoder, сообщение может иметь несколько категорий, и следующий код выделяет каждую категорию, а также текущий месяц для сообщения. Добавьте к своим functions.php .

  // Generate active class for categories when viewing single posts // Props to Sam Nabi http://samnabi.com/blog/highlight-the-current-category-for-single-posts-in-wordpress function singlePostActiveCat ($CatText) { global $post; if (is_singular()) { $categories = wp_get_post_categories($post->ID); foreach ($categories as $category_id) { $category = get_category($category_id); $CatText = preg_replace( "/class=\"(.*)\"><a ([^<>]*)>$category->name<\/a>/", ' class="$1 active"><a $2>' . $category->name . '</a>', $CatText); } } return $CatText; } add_filter('wp_list_categories', 'singlePostActiveCat'); // Generate active class for archives when viewing single posts // Props to Joshua Abenazer http://wordpress.stackexchange.com/questions/62509/wp-get-archives-get-css-selector-for-current-month function singlePostActiveMonth( $ArchiveText ) { if (is_singular()){ $current_month = get_the_date("FY"); if ( preg_match('/'.$current_month.'/i', $ArchiveText ) ) $ArchiveText = preg_replace('/<li>/i', '<li class="active">', $ArchiveText ); } return $ArchiveText; } add_filter( 'get_archives_link', 'singlePostActiveMonth' ); 

Протестировано на моей локальной копии экземпляра WP и, похоже, работает.