web-dev-qa-db-fra.com

Ajout de la classe ul avec wp_list_categories Walker personnalisé

J'essaie de réaliser quelque chose qui semble être simple mais qui me cause des maux de tête. Je liste mes catégories en utilisant wp_list_categories qui me donne ceci ...

<ul>
<li>Fruit</li>
<li>Vegetables</li>
<li>Tinned Goods</li>
<li>Dairy Products</li>
</ul>

Tout ce que je veux faire est d'ajouter une classe à ul et li en utilisant une fonction marcheur, ma fonction ressemble à ceci ....

class Walker_Simple_Example extends Walker {  
    var $db_fields = array( 'parent' => 'parent_id', 'id' => 'object_id' );  

    function start_lvl(&$output, $depth=1, $args=array()) {  
        $output .= "\n<ul class=\"product_cats\">\n";  
    }  

    function end_lvl(&$output, $depth=0, $args=array()) {  
        $output .= "</ul>\n";  
    }  

    function start_el(&$output, $item, $depth=0, $args=array()) {  
        $output .= "<li class=\"item\">".esc_attr( $item->name );
    }  

    function end_el(&$output, $item, $depth=0, $args=array()) {  
        $output .= "</li>\n";  
    }  
}  

Cela fonctionne très bien pour les objets li et leur donne à tous une classe de 'item' mais la classe ul n'apparaît tout simplement pas. Quelqu'un peut-il voir où je me trompe?

2
fightstarr20

Vous devriez étendre Walker_Category et non la classe Walker principale.

class Walker_Simple_Example extends Walker_Category {  

    function start_lvl(&$output, $depth=1, $args=array()) {  
        $output .= "\n<ul class=\"product_cats\">\n";  
    }  

    function end_lvl(&$output, $depth=0, $args=array()) {  
        $output .= "</ul>\n";  
    }  

    function start_el(&$output, $item, $depth=0, $args=array()) {  
        $output .= "<li class=\"item\">".esc_attr( $item->name );
    }  

    function end_el(&$output, $item, $depth=0, $args=array()) {  
        $output .= "</li>\n";  
    }  
}  

wp_list_categories(array('walker'=> new Walker_Simple_Example));

Cela fonctionne maintenant. product_class est appliqué à child uls mais votre lecteur ne conserve pas une grande partie des fonctionnalités par défaut.

Si vous voulez que la classe soit assignée au parent <ul>, c'est un peu compliqué. Ce <ul> provient de la fonction wp_list_categories elle-même , pas du promeneur. Désactivez le "titre" que vous ne semblez pas utiliser et écrivez dans le wrapper <ul>.

echo '<ul class="product_cats">';
  wp_list_categories(array('title_li'=> false));
echo '</ul>';
9
s_ha_dum