Получить родительский продукт высшего уровня в качестве класса тела в WooCommerce - PullRequest
2 голосов
/ 21 апреля 2020

Мне нужно получить категорию верхнего уровня (а не только родительскую категорию) подкатегории продуктов в Woocommerce.

У меня есть этот код для получения идентификатора родительской категории:

if (is_subcategory()) {
  $term = get_queried_object();
  $parent_id = $term->parent;
}

И этот класс делает $ parent_id классом тела:

add_filter( 'body_class', 'parent_id_body_class' );
function parent_id_body_class( $classes ) {
    // add comprehensive text followed by parent id number to the $classes array
    $term = get_queried_object();
    $parent_id = $term->parent;
    $classes[] = 'parent-id-' . $parent_id;
    // return the $classes array
    return $classes;
}

Все это прекрасно работает , но это НЕ родительская категория верхнего уровня. Это просто родитель. У меня есть 3 уровня категорий. Я пока не очень разбираюсь в php ... Я много искал, но не мог найти, как это понять. Ваша помощь будет очень признательна. Спасибо.

1 Ответ

1 голос
/ 21 апреля 2020

Следующее позволит вам отобразить термин Id родительской категории продукта верхнего уровня для классов тела (код с комментариями) :

add_filter( 'body_class', 'wc_product_cat_top_parent_id_body_class' );
function wc_product_cat_top_parent_id_body_class( $classes ) {
    // Only product category archives pages
    if ( is_product_category() ) {
        $taxonomy = 'product_cat'; // Woocommerce product category taxonomy

        // Get all parent terms Ids
        $parent_terms = get_ancestors( get_queried_object_id(), $taxonomy );

        // Only for product subcategories
        if ( sizeof( $parent_terms ) > 0 ) {
            // Loop through all parent terms Ids
            foreach ( $parent_terms as $parent_id ) {
                // Only the product category top level term Id
                if( get_term( $parent_id, $taxonomy )->parent == 0 ) {
                    $classes[] = 'top-parent-id-' . $parent_id;
                }
            }
        }
    }
    return $classes;
}

Код входит в функции. php файл вашей активной дочерней темы (или активной темы). Проверено и работает.

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