woocommerce类别深度为if语句

时间:2018-05-18 10:48:10

标签: php wordpress loops if-statement woocommerce

我不确定在这里继续前进的最佳方式。

我有这样的类别(简化版):

-fruit
--apple
---large
---small

--banana
---var1
----large
----small
---var2
----small
----large

我想使用类别的深度作为if语句中的条件来实现这样的事情:

如果类别是深度2(苹果>大),请执行此操作

否则,如果类别为深度3(香蕉> var1>小),则执行其他操作。

我尝试过使用这里的功能,但除了一个空数组之外一直无法得到任何东西! http://www.devdevote.com/cms/wordpress-hacks/get_depth.html

2 个答案:

答案 0 :(得分:4)

您可以对返回的项目使用get_ancestors(),然后使用count()。从那里将是简单的逻辑。

作为一个函数,它看起来像:

function so50409656_count_ancestors( $object_id, $object_type ='', $resource_type='' ) {

    $terms = get_ancestors( $object_id, $object_type, $resource_type );

    return count($terms) + 1;

}

然后这样叫:

$term_depth = so50409656_count_ancestors( $term->term_id, 'your_term_type', 'taxonomy' );

if ( $term_depth === 1 ) :
    // ..your top level ancestor action
elseif ( $term_depth === 2 ) :
    // ..your direct child choice of actions here
elseif ( $term_depth === 3 ) :
    // ..your second level child action here
endif;

编辑:

澄清1的结果将是顶级祖先,因为OP请求large(在apple>large中)等于2

答案 1 :(得分:0)

您可以使用以下递归功能

function hierarchical_product_cat($category = 0)
{
    $result = '';
    $args = array('parent' => $category);
    $next = get_terms('product_cat', $args);

    if ($next) {
        $result .= '<ul>';
        foreach ($next as $cat) {
            $result .= '<li><a href="' . get_term_link($cat->slug, $cat->taxonomy) . '" title="'.$cat->name.'" ' . '>' . $cat->name . ' (' . $cat->count . ')' . '</a>';
            $result .= $cat->term_id !== 0 ? hierarchical_product_cat($cat->term_id) : null;
        }
        $result .= '</li>';
        $result .= '</ul>';
    }
    return $result;
}
echo hierarchical_product_cat();