我希望获得wordpress网站中的所有类别,但是分别使用父类和子类(以这种方式,我很容易为其设置样式)。在下面的代码中,我获得了父类别,但是每个父类都重复了所有子类别。 谢谢!
<?php
$args = array(
'orderby' => 'name',
'parent' => 0
);
$categories = get_categories( $args );
$categories_sub = get_categories();
foreach ( $categories as $category ) {
echo '<ul class=" span-5 colborder list_main "> <a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a><br/>';
foreach ( $cat->parent > 1 and $categories_sub as $cat) {
$temp=$category->name + '/';
if(get_category_parents($cat)==$temp) {
echo '<a href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a><br/>';
}
$temp="";
}
echo '</ul>';
}
?>
答案 0 :(得分:5)
有几种方法可以创建HTML类别列表。
<强> Default CSS selectors 强>
最简单的方法是显示带有wp_list_categories()的类别列表,并使用默认的CSS选择器设置输出样式:
li.categories li.cat-item li.cat-item-7 li.current-cat li.current-cat-parent ul.children
的 The Walker_Category class 强>
Walker
类用于遍历菜单或类别等分层数据。它是一个抽象类,有四个抽象方法start_el()
,end_el()
,start_lvl()
,end_lvl()
。不需要覆盖类的所有抽象方法,只需要覆盖那些所需的方法。
$args = array( 'hide_empty' => false, 'walker' => new MyWalker(), 'title_li' => false );
wp_list_categories( $args );
class MyWalker extends Walker_Category {
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
$output .= '<a href="' . get_category_link( $category->term_id ) . '" >' . $category->name . '</a><br/>';
}
function end_el( &$output, $page, $depth = 0, $args = array() ) {}
function start_lvl( &$output, $depth = 0, $args = array() ) {
$output .= '<ul class="span-5 colborder list_main">'.PHP_EOL;
}
function end_lvl( &$output, $depth = 0, $args = array() ) {
$output .= '</ul>'.PHP_EOL;
}
}
递归函数也是遍历类别的好方法。这样您就必须在每个节点上手动get the categories。由于get_categories()函数返回所有子节点中的所有子类别,因此必须传递当前类别的ID才能仅显示当前级别类别。
get_the_categories();
function get_the_categories( $parent = 0 )
{
$categories = get_categories( "hide_empty=0&parent=$parent" );
if ( $categories ) {
echo '<ul class="span-5 colborder list_main">';
foreach ( $categories as $cat ) {
if ( $cat->category_parent == $parent ) {
echo '<a href="' . get_category_link( $cat->term_id ) . '" >' . $cat->name . '</a><br/>';
get_the_categories( $cat->term_id );
}
}
echo '</ul>';
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
我刚刚实现了这段代码,但你可以尝试一下..
// get_categories() function will return all the categories
$upaae_categories = get_categories( array(
'orderby' => 'name',
'order' => 'ASC'
) );
foreach( $upaae_categories as $single_cat ) {
if($single_cat->parent < 1) // Display if parent category and exclude child categories
{
echo 'Parent: '.$single_cat->name;
// now get all the child categories
$child_categories=get_categories(
array( 'parent' => $single_cat->term_id )
);
if(sizeof($child_categories)>0){ /* this is just for ensuring that this parent category do have child categories otherwise a category cannot be a parent if does not have any child categories*/
echo '###childs###</br>'
foreach ($child_categories as $child) {
echo $child->name.'</br>';
}// end of loop displaying child categories
} //end of if parent have child categories
}
}