web-dev-qa-db-ja.com

カテゴリリストのマークアップを編集する

X個のカテゴリをリストしたい。私はwp_list_categories関数を使っています、それは以下のマークアップを生成します

<li class="cat-item cat-item-1"><a href="#">Uncategorized</a></li>
<li class="cat-item cat-item-2"><a href="#">Category 2</a></li>
<li class="cat-item cat-item-3"><a href="#">Category 3</a></li>
<li class="cat-item cat-item-4"><a href="#">Category 4</a></li>
<li class="cat-item cat-item-5"><a href="#">Category 5</a></li>

しかし、div内に2つずつli項目をラップする必要があります。次に例を示します。

<div class="one">
    <li class="cat-item cat-item-1"><a href="#">Uncategorized</a></li>
    <li class="cat-item cat-item-2"><a href="#">Category 2</a></li>
</div>
<div class="two">
    <li class="cat-item cat-item-3"><a href="#">Category 3</a></li>
    <li class="cat-item cat-item-4"><a href="#">Category 4</a></li>
</div>
<div class="three">
    <li class="cat-item cat-item-5"><a href="#">Category 5</a></li>
</div>

どうすればそれができますか?ありがとう。

1
jay

可能性のリスト

wp_list_categories() の出力を変更するためのオプションは2つあります。

  1. MarkUpが生成された後にフィルタを使用し、それを再フォーマットします。

    add_filter( 'wp_list_categories', 'wpse88292_reformat_list_cats', 10, 2 );
    function wpse88292_reformat_list_cats( $output, $args )
    {
        // Reformat `$output` here
        // You can use `$args` to only this when condition X == Y
    
        return $output;
    }
    
  2. カスタムウォーカーを使用する

    class Walker_Reformated_Category extends Walker_Category
    {
        static $counter = 0;
    
        function start_el( &$output, $category, $depth, $args )
        {
            if ( 'list' != $args['style'] )
                return;
    
            // Count up before doing anything
            self::$counter++;
    
            // Do additional formatting of `$output`in here
            // It's passed by reference(!)
    
            if ( 0 === self::$counter %2 )
                $output = "<div class='class-{$counter}'>{$output}";
        }
    
        function end_el( &$output, $page, $depth, $args )
        {
            if ( 'list' != $args['style'] )
                return;
    
            // Do additional formatting of `$output`in here
            // It's passed by reference(!)
    
            // Don't count at the end of the el!
            if ( 0 === self::$counter %2 )
                $output = "{$output}</div>";
        }
    }
    
    # Call the categories list with your walker
    wp_list_categories( array(
        // ... some args
        'walker' => new Walker_Reformated_Category()
        // ... even more args
    ) );
    
2
kaiser

echo=0パラメータを使って文字列変数にすることができます。

$items=wp_list_categories("echo=0&title_li=");

それからあなたはそれを展開して配列を得ることができます:

$items=str_replace("</li>","</li>|",$items);
$items=explode("|",$items);

その後、アイテムをループ処理できます。

foreach($items as $i=>$item){
   // to stuff
}

あなたのdivのラップのためにこのようなものを考えることができます:

echo "<div>";
foreach($items as $i=>$item){
    echo $item;
    if($i%2==1){echo "</div><div>";}    
}
echo "</div>";
1
birgire