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>
どうすればそれができますか?ありがとう。
wp_list_categories()
の出力を変更するためのオプションは2つあります。
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;
}
カスタムウォーカーを使用する
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
) );
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>";