web-dev-qa-db-ja.com

Wp_list_categoriesを使ったulクラスの追加

私はそれが単純であるべきであるように思える何かを達成しようとしていますが、頭痛を引き起こしています。私はこれを私に与えるwp_list_categoriesを使って私のカテゴリーをリストしています...

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

私がしたいのはwalker関数を使ってulとliにクラスを追加することだけです。私の関数はこんな感じです….

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

これはliアイテムに対してはうまく働き、それらすべてに 'item'のクラスを与えますが、ulクラスは現れません。誰が私が間違っているところを見ることができますか?

2
fightstarr20

メインのWalkerクラスではなくWalker_Categoryを拡張する必要があります。

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

それは今うまくいきます。 product_class child ulsに適用されますが、ウォーカーはデフォルトの機能の大部分を保持しません。

クラスを親の<ul>に割り当てたい場合、これは少し複雑です。 <ul>wp_list_categories関数自身 からではなく、ウォーカーから来ています。あなたが使っていないような "title"を無効にして、ラッパー<ul>を書いてください。

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