Intereting Posts
Ajax (jquery) wp_query pagination возвращает -1 Выдержки автоматически удаляют пространство абзаца htaccess https перенаправление с www на не-www Скрыть название таксономии, если оно не связано с другой пользовательской таксономией Customizer – get_theme_mod По умолчанию не отображается Шорткод не будет выполняться Настройка правил налогообложения WooCommerce Как создать функцию из кода? Добавление пользовательского класса в меню администратора Как создать шаблоны страниц для показа сообщений в блогах в разных макетах? Как отображать самые популярные сообщения из определенной категории на боковой панели? Выйти из поддомена, не на WordPress страницы на другом сервере? Как я могу редактировать сообщения фиксации в моем репозитории плагинов с поддержкой wp? Почему я получаю домашнюю страницу WAMP при нажатии на URL определенного сайта на LocalHost? jQuery. для получения сообщения meta и вычитания из суммы

Как выделить все текущие категории при просмотре одной записи?

При просмотре одного сообщения функция wp_list_categories уже отмечает текущую категорию этого сообщения, назначая класс CSS current-cat .

Однако, если сообщение сопоставляется с несколькими категориями, отмечена только первая категория (иерархически упорядоченная).

Как назначить класс current-cat всем категориям сообщений?

Solutions Collecting From Web of "Как выделить все текущие категории при просмотре одной записи?"

Чтобы присвоить класс current-cat всем категориям текущего сообщения, мы расширим функцию wp_list_categories с помощью специального Walker .

Предположим, что текущая установка выглядит следующим образом:

 $args = array( 'hierarchical' => 0, 'title_li' => '', 'show_option_none' => '', ); wp_list_categories($args); 

Теперь добавим ходунок (который мы установим на следующем шаге) и выделим новый аргумент, который предоставит массив идентификаторов категорий текущей должности и будет обрабатываться нашим ходоком. Конечно, мы также должны заполнить самый массив.

Это приводит к следующему:

 $highlight = array(); $categories = get_the_category(); foreach ($categories as $category) $highlight[] = $category->cat_ID; $args = array( 'hierarchical' => 0, 'title_li' => '', 'show_option_none' => '', 'highlight' => $highlight, 'walker' => new TFCategoryWalker(), ); wp_list_categories($args); 

Последним шагом является сам ходок. В принципе, мы берем класс Walker_Category по умолчанию и добавляем то, что отсутствует. Поэтому нам нужно только настроить функцию start_el . Непосредственно после создания переменной $class мы добавляем следующее:

 if (! $highlight) $highlight = array(); elseif (! is_array($highlight)) $highlight = array($highlight); if (in_array($category->term_id, $highlight)) $class .= ' current-cat'; 

Вот и все.


В целом, это новый класс walker, который мы добавили в наш файл functions.php :

 class TFCategoryWalker extends Walker_Category { function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { extract($args); $cat_name = esc_attr( $category->name ); $cat_name = apply_filters( 'list_cats', $cat_name, $category ); $link = '<a href="' . esc_url( get_term_link($category) ) . '" '; if ( $use_desc_for_title == 0 || empty($category->description) ) $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"'; else $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"'; $link .= '>'; $link .= $cat_name . '</a>'; if ( !empty($feed_image) || !empty($feed) ) { $link .= ' '; if ( empty($feed_image) ) $link .= '('; $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"'; if ( empty($feed) ) { $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"'; } else { $title = ' title="' . $feed . '"'; $alt = ' alt="' . $feed . '"'; $name = $feed; $link .= $title; } $link .= '>'; if ( empty($feed_image) ) $link .= $name; else $link .= "<img src='$feed_image'$alt$title" . ' />'; $link .= '</a>'; if ( empty($feed_image) ) $link .= ')'; } if ( !empty($show_count) ) $link .= ' (' . intval($category->count) . ')'; if ( 'list' == $args['style'] ) { $output .= "\t<li"; $class = 'cat-item cat-item-' . $category->term_id; // START customization if (! $highlight) $highlight = array(); elseif (! is_array($highlight)) $highlight = array($highlight); if (in_array($category->term_id, $highlight)) $class .= ' current-cat'; // END customization if ( !empty($current_category) ) { $_current_category = get_term( $current_category, $category->taxonomy ); if ( $category->term_id == $current_category ) $class .= ' current-cat'; elseif ( $category->term_id == $_current_category->parent ) $class .= ' current-cat-parent'; } $output .= ' class="' . $class . '"'; $output .= ">$link\n"; } else { $output .= "\t$link<br />\n"; } } // function start_el } // class TFCategoryWalker 

Рекомендации:

  • Функция get_the_category Страница Codex
  • Класс Walker Codex
  • Walker_Category класса Walker_Category