web-dev-qa-db-fra.com

Comment puis-je faire wp_list_categories sortie avec catégorie-slug tant que classe, pour ses enfants?

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?

1
deathlock

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
   )
);
2
Hameedullah Khan