包含自定义URL的类别列表

时间:2012-07-27 作者:Loxzibit

如何像wp\\u list\\u categories那样获取类别列表,但使用get\\u categories,然后在foreach循环中显示链接。原因是我希望链接指向具有[?search type=normal&;s=cat\\u name;]的当前页面而是指向类别url。

单击同一页面时,这将过滤结果。

<?php 

            $categories = get_categories(array(\'hide_empty\' => 0, depth => 0, \'hierarchical\' => false));

            echo \'<ul>\';

            foreach($categories as $category) {

                echo \'<li><a href="?search-type=normal&s=\'.$category->term_id.\'">\'.$category->name.\'</a></li>\';


                    $sub_categories = get_categories(array(\'hide_empty\' => 0, \'parent\' => $category->term_id, \'hierarchical\' => true));

                    if(!$sub_categories) {


                    } else {

                         foreach ($sub_categories as $sub_category) {

                             echo \'<ul>\';
                             echo \'<li><a href="?search-type=normal&s=\'.$sub_category->term_id.\'">\'.$sub_category->name.\'</a></li>\';
                             echo \'</ul>\';
                         }
                    }

            }

            echo \'</ul>\';
        ?>

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

get_categories() 是一个方便的功能,用于获取包含所有信息的类别列表,如id和;每个类别的名称等。

此代码可能有效。这个$category->term_id 将返回每个类别的唯一id$category->name 将返回要显示给用户的名称。

<?php 
$args=array(
  \'orderby\' => \'name\',
  \'order\' => \'ASC\'
  );
$categories=get_categories($args);
foreach($categories as $category) {
echo \'<a href="?search-type=normal&s=\'.$category->term_id.\'">\'.$category->name.\'</a>\';
}
?>
更新-下面是使用自定义Wordpress的代码walker class 编辑链接。将其放入主题功能中。php

 //usage  wp_list_categories( array(\'walker\' => new wpse_59862_walker() ) ) 

class wpse_59862_walker extends Walker_Category {

    // copied function from /inlcude/category-template.php and edited as per requirements
    function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
        extract($args);

        $cat_name = esc_attr( $category->name );
        $cat_name = apply_filters( \'list_cats\', $cat_name, $category );
        $my_blog_link = site_url(\'/\'); //this is to return blog url

        //here I edited the link to meet your requirments.
        $link = \'<a href="\'.$my_blog_link.\'?search-type=normal&s=\'.$category->term_id.\'" \';

        if ( $use_desc_for_title == 0 || empty($category->description) )
            $link .= \'title="\' . esc_attr( sprintf(__( \'View all posts filed under %s\' ), $cat_name) ) . \'"\';
        else
            $link .= \'title="\' . esc_attr( strip_tags( apply_filters( \'category_description\', $category->description, $category ) ) ) . \'"\';
        $link .= \'>\';
        $link .= $cat_name . \'</a>\';

        if ( !empty($feed_image) || !empty($feed) ) {
            $link .= \' \';

            if ( empty($feed_image) )
                $link .= \'(\';

            $link .= \'<a href="\' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . \'"\';

            if ( empty($feed) ) {
                $alt = \' alt="\' . sprintf(__( \'Feed for all posts filed under %s\' ), $cat_name ) . \'"\';
            } else {
                $title = \' title="\' . $feed . \'"\';
                $alt = \' alt="\' . $feed . \'"\';
                $name = $feed;
                $link .= $title;
            }

            $link .= \'>\';

            if ( empty($feed_image) )
                $link .= $name;
            else
                $link .= "<img src=\'$feed_image\'$alt$title" . \' />\';

            $link .= \'</a>\';

            if ( empty($feed_image) )
                $link .= \')\';
        }

        if ( !empty($show_count) )
            $link .= \' (\' . intval($category->count) . \')\';

        if ( \'list\' == $args[\'style\'] ) {
            $output .= "\\t<li";
            $class = \'cat-item cat-item-\' . $category->term_id;
            if ( !empty($current_category) ) {
                $_current_category = get_term( $current_category, $category->taxonomy );
                if ( $category->term_id == $current_category )
                    $class .=  \' current-cat\';
                elseif ( $category->term_id == $_current_category->parent )
                    $class .=  \' current-cat-parent\';
            }
            $output .=  \' class="\' . $class . \'"\';
            $output .= ">$link\\n";
        } else {
            $output .= "\\t$link<br />\\n";
        }
    }

}

结束