2

先说场景先说wordpress中的分类结构是这样的

Level 1: Top
Level 2: -Nextme_1
Level 3: --Nextme_2
         --Nextme_3
Level 4: ---Nextme_4
         ---Nextme_5

现在我需要检查类别的级别是什么?假设我捕获了一个级别 3 的类别,所以我必须使用不同的模板,如果它是级别 4。那么我需要使用另一个模板吗?

任何人都可以给我一些提示吗?

谢谢
拉胡尔

4

4 回答 4

7

如果您没有很多类别,您可以尝试从管理员编辑他们的 slug,然后在您的页面中您以这种方式获得类别 slug:

if (is_category()) {
    $cat = get_query_var('cat');
    $category = get_category($cat);
    echo 'your slug is '. $category->slug;
}

现在,当您编辑类别 slug 时,请尝试根据它们的级别命名它们:cat-lvl-1、cat-lvl-2。然后在您的页面中,您使用一些 php 字符串函数从类别 slug 中提取数字,然后检查该数字:

if ($category->slug == 1 ) {
//load the template for the category of level 1
}
 if ($category->slug == 2 ) {
    //load the template for the category of level 2
    }

等等。

稍后编辑:试试这个:

function get_level($category, $level = 0)
{
    if ($category->category_parent == 0) {
        return $level;
    } else {
        $level++;
        $category = get_category($category->category_parent);
        get_level($category, $level);
    }

}

if (is_category()) {
    $cat = get_query_var('cat');
    $yourcat = get_category($cat);

    echo get_level($yourcat);
}
于 2012-02-10T10:19:29.793 回答
4

您可以调用get_ancestors()函数来获取an array containing the parents of the given object. 然后你需要计算结果中的元素

function get_the_level($id, $type = 'category') {
  return count( get_ancestors($id, $type) );
}

if( is_category() ) {
  $level = get_the_level( $cat );
} 
elseif( is_product_category() ) {
  $level = get_the_level( $wp_query->get_queried_object()->term_id, 'product_cat' );
}
于 2017-02-08T10:10:59.300 回答
3

非常感谢。这是极好的,只需稍作更改,您编写的代码就可以了,但它没有返回任何值。(即 $level)虽然它的计算是正确的。我做了一个小改动,现在它工作正常,对下面给出的代码进行了轻微编辑..

`

function get_level($category, $level = 0)
{
    if ($category->category_parent == 0) {
        return $level;
    } else {
        $level++;
        $category = get_category($category->category_parent);
        return get_level($category, $level);
    }

}

if (is_category()) {
    $cat = get_query_var('cat');
    $yourcat = get_category($cat);

    echo get_level($yourcat);
}

`

谢谢@zuzuleinen

于 2012-02-10T22:14:22.497 回答
0

几个月前我访问了这个页面。我今天回来了,在上面的解决方案上箭头然后仍然去挖掘。虽然它是一个很好的解决方案,但 Wordpress 通常会提供更好或接近的解决方案。

get_category_parents()

这个函数基本上和 Rahul 输入的一样。它还称自己为最合乎逻辑的方法,这就是为什么 Rahul 在这点上从我这里得到一个观点。不要使用 $link,返回一串类别,explode() 然后计算它们,或者我想我们可以计算使用分隔符的次数并加 1。

function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
   $chain = '';
$parent = get_term( $id, 'category' );
if ( is_wp_error( $parent ) )
    return $parent;

if ( $nicename )
    $name = $parent->slug;
else
    $name = $parent->name;

if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
    $visited[] = $parent->parent;
    $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
}

if ( $link )
    $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
else
    $chain .= $name.$separator;
return $chain;

}

于 2014-07-06T11:41:37.543 回答