如何在wordpress中获取类别

时间:2013-05-16 10:58:52

标签: php css wordpress

我希望获得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>'; 
}
?>

3 个答案:

答案 0 :(得分:5)

有几种方法可以创建HTML类别列表。

wp_list_categories()

<强> 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;
    }  
}

Recursive Function

递归函数也是遍历类别的好方法。这样您就必须在每个节点上手动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)

此答案列出了其子类别的类别。请参阅以下链接:

Display Wordpress parent Category with their child category

所有归功于saorabh。

答案 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

             }
            }