WP_LIST_CATEGORIES()-CURRENT-CAT类也在帖子中?

时间:2012-07-31 作者:mathiregister

我编写了自己的函数来列出某个分类法的所有分类法术语…

function wr_list_taxonomy($taxonomy, $orderby, $hierarchical) {
    $show_count   = 0;
    $pad_counts   = 0;
    $title        = \'\';

    $args = array(
      \'taxonomy\'     => $taxonomy,
      \'orderby\'      => $orderby,
      \'show_count\'   => $show_count,
      \'pad_counts\'   => $pad_counts,
      \'hierarchical\' => $hierarchical,
      \'title_li\'     => $title
    );

    return wp_list_categories( $args );
}
所以这个函数的工作原理与wp_list_categories() 一旦我进入学期页面,还会推出一个“当前猫”课程。

想象一下我的URL结构…

www.mysite.com/term //current-cat works perfect
www.mysite.com/term/a-post-associated-with-this-term //current-cat not assigned
一旦我在一个岗位上,但如上文所述,在这个“类别”内,是否有机会让“当前猫”课程也发挥作用?

update:

这个wr_list_taxonomy() 函数在my中调用header.php 文件

<nav id="main-nav">
            <ul class="wr-nav" role="navigation">
                    <?php
                        global $post;
                        $taxonomy = \'event_type\';
                        $term_id = 0;
                        $terms = wp_get_post_terms( $post->ID, $taxonomy, array("fields" => "ids") );
                        if ( !empty($terms) )
                            $term_id = $terms[0];
                        wr_list_taxonomy($taxonomy, \'name\', 1, $term_id); ?>
            </ul>
</nav>
我更新了wr_list_taxonomy() 功能到您的版本。

此外,我还有另一个功能,可能与我想要的东西相关…

/**
 * Add category-slug as classname to wp_list_categories()
 */

add_filter(\'wp_list_categories\', \'add_slug_css_list_categories\', 10, 2);

function add_slug_css_list_categories($list, $args) {

    if ( $args["taxonomy"] == "event_type" ) {
        $cats = get_terms(\'event_type\');
        $class = \'term term-\';
    } else {
        $cats = get_categories();
        $class = \'category-\';
    }

    foreach( $cats as $cat ) {
        $find = \'cat-item-\' . $cat->term_id . \'"\';
        $replace = $class . $cat->slug . \'"\';
        $list = str_replace( $find, $replace, $list );
        $find = \'cat-item-\' . $cat->term_id . \' \';
        $replace = $class . $cat->slug . \' \';
        $list = str_replace( $find, $replace, $list );
    }

    return $list;
}
此函数将“类别slug”添加到每个<li> 中的项目wr_list_taxonomy() 作用这很好用。

我只需要在单身时也申请“当前猫”课程。与我所在的“当前类别”关联的php(post)网站。

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

是的,偏离航线。您只需要获取术语id并将其放在args上。检查wp_list_categories()

function wr_list_taxonomy($taxonomy, $orderby, $hierarchical, $cat_id) {
    $show_count   = 0;
    $pad_counts   = 0;
    $title        = \'\';
    $cat_id = 0;

    $args = array(
      \'taxonomy\'     => $taxonomy,
      \'orderby\'      => $orderby,
      \'show_count\'   => $show_count,
      \'pad_counts\'   => $pad_counts,
      \'hierarchical\' => $hierarchical,
      \'title_li\'     => $title,
      \'current_category\' => $cat_id
    );

    return wp_list_categories( $args );
}
您必须传递类别id或术语id。才能使其工作。

How Do You Get Category ID?

例如:

    global $post;
    $taxonomy = \'my-tax\';
    $term_id = 0;
    if(is_singular(\'post\')){ // post type is optional.
      $terms = wp_get_post_terms( $post->ID, $taxonomy, array("fields" => "ids") );
      if(!empty($terms))
        $term_id = $terms[0]; //we need only one term id
    }

   wr_list_taxonomy($taxonomy, $orderby, $hierarchical, $term_id);
这只是一个简单的例子,还有其他方法可以做到这一点。这取决于您在哪里使用代码。

SO网友:Vasim Shaikh

根据已接受的答案,只需传入一个额外的参数。我只是写下完整的代码,这样很容易理解。

    <?php  $taxonomy = \'category\';
 
 $term_id = 0;
    if(is_singular(\'post\')){ // post type is optional.
      $terms = wp_get_post_terms( $post->ID, $taxonomy, array("fields" => "ids") );
      if(!empty($terms))
        $term_id = $terms[0]; //we need only one term id
    }

 echo wp_list_categories(
   array(
     \'show_count\'   => false,
   \'pad_counts\'   => false,
   \'use_desc_for_title\' => false,
   \'title_li\'=>\'\',
   \'hierarchical\' =>false,
   \'current_category\' => $term_id
   )
 );
 ?>

结束