由於似乎沒有人對我有任何解決方案,我會分享我使用的一個解決方案。但要小心,這對於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;
}
小解釋:上述函數只返回子類別爲子類的子類。所以它忽略了最後一個(第三個)沒有孩子,只返回第二個。
這當然可以改善,我知道我可能會得到一些「批評」,其實,我希望如此!所以不要猶豫:)