En termes simples, j'aimerais changer le résultat de wp_list_categories
à partir de ceci:
<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>
à cela à la place:
<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>
Alors j'ai essayé Google et j'ai trouvé une solution mentionnée à cette question , ajoutez un filtre à wp_list_categories et une requête si elle est utilisée pour lister les conditions fiscales? .
Je dois mettre ceci sur mon 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;
}
EDIT: Maintenant je réalise le problème!
Le filtre ci-dessus fonctionne pour les catégories parentes. Cependant, cela ne fonctionne pas pour les enfants!
Donc, en utilisant ce code, si j'utilise wp_list_categories
, le résultat sera le suivant:
<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>
Notez que même si la classe des parents est category-articles
, la classe des enfants reste en tant que cat-item-10
.
Y a-t-il une solution à cela?
Je ne suis pas sûr que l’interrogation des catégories soit une bonne idée. Le code suivant étend le Walker_Category
et l'utilise pour effectuer le remplacement. Mettez ce qui suit dans votre 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 );
}
}
Appelez ensuite wp_list_categories comme suit:
wp_list_categories(
array(
'child_of' => 4,
'walker' => new WPSE67791_Walker_Category
)
);