2014-11-04 49 views
0

我只想從woocommerce中的3深度類別結構中獲取我的第二級類別。不能僅獲得第二級woocommerce產品類別

但它總是返回第3級。

/** 
* Get second level cat 
*/ 
function get_second_cat_level($parent_id) { 
    $subcats = array(); 
    $args = array(
     'parent'  => $parent_id, 
     'taxonomy'  => 'product_cat', 
     'orderby'  => 'name', 
     'show_count' => 0, 
     'pad_counts' => 0, 
     'hierarchical' => 1, 
     'hide_empty' => 0 
     ); 
    $cats = get_categories($args); 

    foreach ($cats as $cat) { 
     $subcats[] = $cat; 
     var_dump($cat); 
    } 

    return $cats; 
} 

我假設$parent_id是parent_category的字符串id。 這只是瘋狂。

回答

0

由於似乎沒有人對我有任何解決方案,我會分享我使用的一個解決方案。但要小心,這對於3個深度級別類別組非常具體。

我創建2個功能: 一個獲得從該ID的類別對象,所述塊或給定類別的名稱:

function get_product_category($field, $value) { 
    $authorized_fields = array(
     'term_id', 
     'name', 
     'slug' 
    ); 
    // Check if field and value are set and not empty 
    if (!isset($field) || empty($field) || !isset($value) || empty($value)) { 
     $response = "Error : check your args, some are not set or are empty."; 
    } 
    else { 
     // Check if the specified field is part of the authorised ones 
     if (!in_array($field, $authorized_fields)) { 
      $response = "Unauthorised field $field";  } 
     else { 
      // init exists var to determine later if specified value matches 
      $exists = false; 
      $product_cats = get_terms('product_cat', array(
       'hide_empty' => 0, 
       'orderby' => 'name' 
      )); 
      // the loop will stop once it will have found the matching value in categories 
      foreach ($product_cats as $product_cat) { 
       if($product_cat->$field == $value) { 
        $response = $product_cat; 
        $exists = true; 
        break; 
       } 
      } 
      if ($exists == false) { 
       $response = array(
        "message" => "Error with specified args", 
        "field" => "$field", 
        "value" => "$value" 
       ); 
      } 
     } 
    } 
    return $response; 
} 

第二功能使用第一個返回第二級類別。它使用一個參數$dep,當它被單獨測試爲false時,返回另一個我需要的地方。所以不要關注它。

function get_first_child_cat_only ($cat_id, $dep = true) { 
    // Array which handle all the 2nd child sub cats 
    $subcats = array(); 
    // $cat_id is the parent (1st level) cat id 
    $categories = get_term_children($cat_id, 'product_cat'); 
    foreach ($categories as $sub_category) { 
     if ($dep == true && get_term_children($sub_category, 'product_cat')) { 
      $subcats[] = get_product_category('term_id', $sub_category); 
     } 
     elseif($dep == false) { 
      $subcats[] = get_product_category('term_id', $sub_category); 
     } 
    } 
    return $subcats; 
} 

小解釋:上述函數只返回子類別爲子類的子類。所以它忽略了最後一個(第三個)沒有孩子,只返回第二個。

這當然可以改善,我知道我可能會得到一些「批評」,其實,我希望如此!所以不要猶豫:)

相關問題