Как я могу заставить категории списка 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
.
Есть ли какое-нибудь решение этой проблемы?
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
)
);