Добавьте Класс В то время как на Текущем Сообщении; wp_list_categories

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

Это - самый гибкий код, который я смог найти для решения этой общей проблемы.

Мне любопытно, если у кого-либо есть решение решить одну проблему, этот код не обращается - добавление класса к текущей дочерней категории при просмотре сообщения в той категории.

<?php
$categories = get_the_category();
    echo '<ul>';
foreach($categories as $category){
    $parent = $category->parent;
    if($category->parent == 0){
    }
    else{
        wp_list_categories("child_of=$parent&title_li");
    }
}
    echo '</ul>';
?>

Для дальнейшего описания то, что я ищу:

Скажем, родительской категорией являются Лодки, и дочерней категорией является Skooners. Я написал статью, названную, "Как Купить Skooner" и зарегистрировал его под Лодками> Skooners. Когда я перешел к категории Boats, этот код действительно отображает skooners как дочернюю категорию и присваивает класс CSS, который позволяет нам указывать через дизайн, что это - категория, которую мы просматриваем. Однако, когда я перешел к статье "How to Buy a Skooner" (зарегистрированный под Лодками> Skooners), соответствующие дочерние категории все еще отображены, но пропускают класс CSS .current-cat.

Видеть, что это в действии посещает http://themeforward.com/demo2/category/category/ и перешло с подменю справа к категории "Link". Затем нажмите статью "Link", и Вы заметите, что она теряет свое фиолетовое моделирование, примененное через .current-cat.

1
02.05.2013, 22:08
3 ответа

очень похожий подход к ответу @AndrettiMilas:

add_filter('wp_list_categories','style_current_cat_single_post');
// filter to add the .current-cat class to categories list in single post
function style_current_cat_single_post($output) {
    if( is_single() ) :
        global $post;
        foreach ( get_the_category($post->ID) as $cat ) {
            $cats[] = $cat->term_id;
        }
        foreach($cats as $value) {
            if(preg_match('#item-' . $value . '">#', $output)) {
            $output = str_replace('item-' . $value . '">', 'item-' . $value . ' current-cat">', $output);
            }
        }
    endif;
return $output;
}

адаптированный от одной из моих статей.

2
19.02.2020, 22:48
  • 1
    Эй Michael, из любопытства - Вы думаете, что один из этих ответов превосходит другой? –  AndrettiMilas 03.05.2013, 01:09
  • 2
    , который я не могу сказать - оба posssibities, очень похож - не использование wp_get_post_categories() сохраняет один запрос, в то время как Ваш цикл для добавления .current-cat кажется, более эффективен мне... Я испытываю желание объединить оба кода и запустить несколько тестов. –  Michael 03.05.2013, 12:19

Я думаю, что должно быть меньше кода интенсивный ответ здесь, таким образом, я оставлю этот вопрос открытым некоторое время дольше, однако, я нашел, что добавление этого кода к functions.php, все еще используя код я обеспечил в своем исходном вопросе, является одним возможным решением.

// Generate the current-cat class when viewing single posts 
class singlePostCurrentCat { 
  function wp_list_categories ($text) { 
    global $post; 
      if (is_singular()) { 
        $categories = wp_get_post_categories($post->ID); 
        foreach ($categories as $category_id) { 
          $category = get_category($category_id); 
          $text = preg_replace( 
            "/class=\"(.*)\"><a ([^<>]*)>$category->name<\/a>/", 
            ' class="$1 current-cat"><a $2>' . $category->name . '</a>', 
          $text); 
        } 
      } 
    return $text; 
  } 
} 
add_filter('wp_list_categories', array('singlePostCurrentCat','wp_list_categories'));
1
19.02.2020, 22:48

Из Кодекса Wordpress:

current_category (целое число) Позволяет Вам вынуждать "текущую кошку" появиться на использовании wp_list_categories, которые не находятся на страницах архива категории. Обычно, текущая кошка установлена только на страницах архива категории. Если Вы имеете другое использование для него или хотите вынудить его выделить другую категорию, это переопределяет то, что функция думает, что "текущая" категория. Этот параметр добавляется в Версии 2.6

http://codex.wordpress.org/Template_Tags/wp_list_categories

  • Andretti это похоже на Вас, может вынудить функцию показать класс.

Обновление: Попробуйте это. Я попробовал, и это работало на меня.

Измените свой код от:

wp_list_categories("child_of=$parent&title_li");

кому:

wp_list_categories("child_of=$parent&title_li&current_category=1");

Я попробовал его здесь:

http://wptest.defaria.me/uncategorized/hello-world/

Терпите меня, что это - страница WP для тестирования только.. таким образом, Вы не будете видеть выделенной категории, но если Вы посмотрите на исходный код, то Вы будете видеть, что класс текущей кошки присутствует на странице сообщения. Я добавил цикл категории внизу страницы после комментариев.

0
19.02.2020, 22:48
  • 1
    Право, но это действительно не обращается, как сделать это - какая-либо ссылка, Вы могли обеспечить, что может быть немного более подробным? –  AndrettiMilas 02.05.2013, 22:24
  • 2
    Посмотрите обновление выше. –  gdaniel 02.05.2013, 22:30
  • 3
    Это не работало, к сожалению. уверенный :-( –  AndrettiMilas 02.05.2013, 23:59

Теги

Похожие вопросы