Wordpress - 嵌套的类别列表&小类

时间:2014-05-14 13:58:42

标签: php wordpress wordpress-theming

我试图用嵌套的子类别显示我的wordpress类别列表。 到目前为止,我只能获得一个父类别列表或一个不包括父母的子类别列表,但我还没有能够加入这两个类别。

这是我想要创建的结果:

  • 父类别
    • 子类别
    • 子类别
  • 父类别
    • 子类别
  • 父类别
    • 子类别
    • 子类别
    • 子类别

编辑:

这样做的想法是创建一个自定义类别页面。 HTML如下:

<h1>Categories</h1>
<ul class="blocks">
    <li>
        <img src="http://placehold.it/250x250" alt="title" />
        <h2>Parent Category</h2>
        <ul class="models">
            <li><a href="#">Sub Category</a></li>
            <li><a href="#">Sub Category</a></li>
        </ul>
    </li>
    <li>
        <img src="http://placehold.it/250x250" alt="title" />
        <h2>Parent Category</h2>
        <ul class="models">
            <li><a href="#">Sub Category</a></li>
            <li><a href="#">Sub Category</a></li>
            <li><a href="#">Sub Category</a></li>
        </ul>
    </li>
</ul>

3 个答案:

答案 0 :(得分:5)

您可以使用wp_list_categories() function使用这些默认值:

<?php wp_list_categories(array(
    'show_option_all'    => '',
    'orderby'            => 'name',
    'order'              => 'ASC',
    'style'              => 'list',
    'show_count'         => 0,
    'hide_empty'         => 1,
    'use_desc_for_title' => 1,
    'child_of'           => 0,
    'feed'               => '',
    'feed_type'          => '',
    'feed_image'         => '',
    'exclude'            => '',
    'exclude_tree'       => '',
    'include'            => '',
    'hierarchical'       => 1,
    'title_li'           => __( 'Categories' ),
    'show_option_none'   => __( 'No categories' ),
    'number'             => null,
    'echo'               => 1,
    'depth'              => 0,
    'current_category'   => 0,
    'pad_counts'         => 0,
    'taxonomy'           => 'category',
    'walker'             => null
)); ?>

从技术上讲,你可以说:

wp_list_categories();

这将按层次结构列出隐藏任何空类别并添加&#34;类别&#34;的标题。在他们之上。

编辑 - 独立的父母和子女

你可以尝试使用wp_list_categories()get_categories() function的组合来做这样的事情。

<h1>Categories</h1>
<ul class="blocks">
<?php $parents = get_categories(array('hierarchical' => false));
    if(!empty($parents)){
        foreach($parents as $parent){
?>
        <li>
            <h2><?php echo $parent->name; ?></h2>
            <ul class="models">
                <?php wp_list_categories(array('hierarchical' => false, 'child_of' => $parent->term_id)); ?>
            </ul>
        </li>
<?php
        }
    } else { 
?>
    <li>No Categories</li>
<?php } ?>
</ul>

答案 1 :(得分:0)

最好的办法是扩展Walker课程,以便遍历类别......最简单的方法是创建自己的Widget。

这是我之前创建的一个:https://www.dropbox.com/s/mazpb4cxmqracwo/adv_categories.zip

我不会假装它是100%功能但它允许我在我的博客上有子类别的类别。

答案 2 :(得分:0)

对于那些以后一直在寻找这些内容的人,这是我最近在每个级别使用get_categories()和foreach循环创建的一个示例,以获取具有当前级别类别作为父级的子类别。它可以深入到三个层次,但可以轻松修改以变得更深或更浅。

我将自己的用例的HTML保留在这里,而不是使用原始问题的代码,但是在模板部分也可以轻松地对其进行修改。这段特殊的代码构建了嵌套的类别列表,其中包含复选框输入和列表中的标签。

<?php
$parent_cats = get_categories(array('parent' => 0));
?>
<?php if( ! empty( $parent_cats ) ) :

    foreach( $parent_cats as $parent_cat ) :
        $child_cats = get_categories(array('parent' => $parent_cat->term_id));
?>

    <li>

        <label for="<?php echo $parent_cat->slug; ?>">

            <input type="checkbox" name="cat" id="<?php echo $parent_cat->slug; ?>">
            
            <?php echo $parent_cat->name; ?>

        </label>

        <?php if( $child_cats ) : ?>

            <ul class="child-cats">

                <?php foreach( $child_cats as $child_cat ) :
                    $grandchild_cats = get_categories(array('parent' => $child_cat->term_id));
                ?>

                    <li>

                        <label for="<?php echo $child_cat->slug; ?>">

                            <input type="checkbox" id="<?php echo $child_cat->slug; ?>" name="cat">

                            <?php echo $child_cat->name; ?>
                            
                        </label>
                        
                        <?php if( $grandchild_cats ) : ?>

                            <ul class="grandchild-cats">

                                <?php foreach( $grandchild_cats as $grandchild_cat ) : ?>

                                    <li>

                                        <label for="<?php echo $grandchild_cat->slug; ?>">

                                            <input type="checkbox" id="<?php echo $grandchild_cat; ?>" name="cat">

                                            <?php echo $grandchild_cat->name; ?>
                                            
                                        </label>
                                        
                                    </li>

                                <?php endforeach; ?>
                                
                            </ul>

                        <?php endif; ?>

                    </li>

                <?php endforeach; ?>
                
            </ul>

        <?php endif; ?>

    </li>

<?php endforeach; endif; ?>