Как я могу заставить категории списка wp выводить li с помощью category-slug в качестве класса для его дочерних элементов?


Проще говоря, я хотел бы изменить вывод wp_list_categories из этого:

 <li class="cat-item cat-item-1"><a href="http://mysite.com/category/articles">Articles</a></li>
 <li class="cat-item cat-item-7"><a href="http://mysite.com/category/design">Design</a></li>

Вместо этого:

 <li class="cat-item category-articles"><a href="http://mysite.com/category/articles">Articles</a></li>
 <li class="cat-item category-design"><a href="http://mysite.com/category/design">Design</a></li>

Итак, я попробовал Google и нашел решение, упомянутое в этом вопросе добавьте фильтр в wp_list_categories и запросите, используется ли он для перечисления налоговых терминов? .

Мне нужно надеть это на свой functions.php:

 add_filter('wp_list_categories', 'add_slug_css_list_categories');

 function add_slug_css_list_categories($list) {

     $cats = get_categories();

     foreach($cats as $cat) {
         $find = 'cat-item-' . $cat->term_id . '"';
         $replace = 'category-' . $cat->slug . '"';
         $list = str_replace( $find, $replace, $list );
         $find = 'cat-item-' . $cat->term_id . ' ';
         $replace = 'category-' . $cat->slug . ' ';
         $list = str_replace( $find, $replace, $list );*/
     }

     return $list;
 }

РЕДАКТИРОВАТЬ: Теперь я понимаю, в чем проблема!

Приведенный выше фильтр работает для родительских категорий. Однако это не работает для дети!

Итак, используя этот код, если я использую wp_list_categories, он будет выводиться следующим образом:

 <li class="cat-item category-articles"><a href="http://mysite.com/category/articles">Articles</a>
    <ul class="children>
     <li class="cat-item cat-item-10"><a href="http://mysite.com/category/articles/tips/">Tips</a></li>
     <li class="cat-item cat-item-11"><a href="http://mysite.com/category/articles/tutorials/">Tutorials</a></li>
    </ul>
 </li>
 <li class="cat-item category-design"><a href="http://mysite.com/category/design">Design</a></li>

Обратите внимание, что даже если класс родителей равен category-articles, класс детей остается таким же cat-item-10.

Есть ли какое-нибудь решение этой проблемы?

Author: Community, 2012-10-10

1 answers

Я не уверен, что повторный запрос категорий - хорошая идея. Следующий код расширяет Walker_Category и использует его для замены. Поместите следующее в свой functions.php :

class WPSE67791_Walker_Category extends Walker_Category {

    public function start_el(&$output, $category, $depth, $args) {
        parent::start_el( $output, $category, $depth, $args );
                $find = 'cat-item-' . $category->term_id . '"';
                $replace = 'category-' . $category->slug . '"';
                $output = str_replace( $find, $replace, $output );

    }
}

Затем вызовите wp_list_categories следующим образом:

wp_list_categories(
   array(
      'child_of' => 4,
      'walker' => new WPSE67791_Walker_Category
   )
);
 2
Author: Hameedullah Khan, 2012-10-10 20:01:40