编辑类别列表的标记

时间:2013-02-25 作者:jay

我想列出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>
但是,我需要将每两个li项包装在一个div中,例如:

<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>
我怎么能做到?谢谢

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

可能性列表

您正好有两个选项可以更改wp_list_categories()

生成标记后使用筛选器并重新格式化:

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

SO网友:birgire

您可以使用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>";

结束

相关推荐

将wp_Dropdown_Categories变为一个变量,该变量将一直存在,直到更改为止?

用户从wp\\u dropdown\\u categories中选择Categoriy1,如果用户在任何时候单击tag2,他们只会看到Categoriy1中带有tag2的帖子,而不是所有带有tag2的帖子。是否有方法将所选类别存储为变量,并使用该变量过滤所有内容,直到该变量被更改或删除?