2012-01-11 2 views
4

Привет, Я пытаюсь найти самую большую категорию сообщения. Я попытался найти любые встроенные функции WP, но не смог.Функция Wordpress, чтобы получить категорию верхнего уровня сообщения?

Например, у меня есть подобные категории.

Parent 
    sub-1 
      sub-2 

И у меня есть сообщение в под-2. Таким образом, с идентификатором sub-2, я пытаюсь найти идентификатор самой верхней категории, который назван «Parent» в этом примере.

ответ

12

Хорошо, я закончил создание своей собственной функции, чтобы получить верхнюю категорию самого высокого уровня.

// function to get the top level category object 
// Usage - $top_cat = get_top_category(); 
// echo $top_cat->slug; 

function get_top_category() { 
    $cats = get_the_category(); // category object 
    $top_cat_obj = array(); 

    foreach($cats as $cat) { 
     if ($cat->parent == 0) { 
      $top_cat_obj[] = $cat; 
     } 
    } 
    $top_cat_obj = $top_cat_obj[0]; 
    return $top_cat_obj; 
} 
+1

Вам не нужен массив для размещения объекта верхней категории. Строка var должна сделать это :-) –

+0

См. этот ответ. Это флаг, который может быть передан get_terms(). http://stackoverflow.com/questions/15113247/wordpress-show-only-top-level-categories – GhostToast

+0

@GhostToast Но вы не можете передать сообщение get_terms() – simonthesorcerer

-2

мне нужен родительский ID и это работало хорошо и просто для меня:

$topcat = get_the_category(); 
echo $topcat[0]->category_parent; 
+0

Это показывает только родителя текущей категории, а не категория верхнего уровня (в этом случае два уровня вверх) –

0

Для тех, имеющих проблемы с этим методом я нашел простое решение, вероятно, не самый лучший с точки зрения эффективности , Чтобы получить верхнюю категорию уровня родителя со страницы сообщений/продукта

Использование:

global $post; 
$terms = wc_get_product_terms($post->ID, 'product_cat', array('orderby' => 'parent', 'order' => 'DESC')); 
if (! empty($terms)) { 
    $main_term = $terms[0]; 
    $root_cat_id = get_top_category($main_term->term_id); 

Функция:

function get_top_category ($catid) { 
$cat_parent_id=0; 
while ($catid!=null & $catid!=0) { 
    $current_term = get_term($catid); 
    $catid = $current_term->parent; 
    if($catid!=null & $catid!=0){ 
     $cat_parent_id = $catid; 
    }else{ 
     $cat_parent_id = $current_term->term_id; 
    } 
} 
return $cat_parent_id; 
} 
0

попробовать это

$categories = get_categories(array(
    'orderby' => 'name', 
    'parent' => 0 //this parameter is important for top level category 
    ) 
); 
+0

Опубликуйте некоторое объяснение для своего решения, а не просто отправьте код. – VPK

Смежные вопросы