我试图用嵌套的子类别显示我的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>
答案 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; ?>