Adicionando ul classe com wp_list_categories Custom Walker

2

Estou tentando conseguir algo que parece ser simples, mas está me causando dores de cabeça. Estou listando minhas categorias usando wp_list_categories, o que me dá isso ...

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

Tudo que eu quero fazer é adicionar uma classe ao ul e li usando uma função walker, minha função fica assim ....

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";  
    }  
}  

Isso funciona bem para os itens li e dá a todos uma classe de 'item', mas a classe ul simplesmente não aparece. Alguém pode ver onde estou errado?

    
por fightstarr20 22.09.2013 / 17:34

1 resposta

9

Você deve estender Walker_Category não a classe principal de Walker.

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));

Isso funciona agora. product_class é aplicado ao filho ul s, mas seu andador não preserva grande parte da funcionalidade padrão.

Se você deseja que a classe atribuída ao pai <ul> , isso é um pouco complicado demais. Esse <ul> é proveniente da função wp_list_categories , não do andador. Desative o "título" que você parece não estar usando e escreva no wrapper <ul> .

echo '<ul class="product_cats">';
  wp_list_categories(array('title_li'=> false));
echo '</ul>';
    
por s_ha_dum 22.09.2013 / 17:51