глубина категории woocommerce как условие с оператором if - PullRequest
0 голосов
/ 18 мая 2018

Я не уверен, что лучший способ продолжить здесь.

У меня есть категории, выложенные следующим образом (упрощенная версия):

-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 голосов
/ 25 мая 2018

Вы можете использовать ниже рекурсивную функцию

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();
0 голосов
/ 21 мая 2018

Вы можете использовать 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 для чего-то типа largeapple>large), равного 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...