Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

常見做法有兩種
作法一:先從 menu 找到主類別,再抓所有下層子類別
<?php
$menu_name = 'main-menu'; // 選單名稱或 slug
$target_menu_title = '產品分類'; // 你要找的主選單名稱
$menu_items = wp_get_nav_menu_items($menu_name);
$target_category_id = 0;
if ($menu_items) {
foreach ($menu_items as $item) {
// 找到指定的主選單
if ($item->title === $target_menu_title && $item->object === 'category') {
$target_category_id = (int) $item->object_id;
break;
}
}
}
if ($target_category_id) {
// 取得所有子分類(包含孫分類)
$child_categories = get_terms([
'taxonomy' => 'category',
'hide_empty' => false,
'child_of' => $target_category_id,
]);
echo '<pre>';
print_r($child_categories);
echo '</pre>';
}
?>如果只要「直屬子分類」,不要孫分類
把 child_of 改成 parent:
<?php
$child_categories = get_terms([
'taxonomy' => 'category',
'hide_empty' => false,
'parent' => $target_category_id,
]);
?>如果你是已知主類別 ID,直接抓子類別
其實不一定要先經過 menu,直接這樣最乾脆:
<?php
$parent_cat_id = 12; // 主類別ID
$child_categories = get_terms([
'taxonomy' => 'category',
'hide_empty' => false,
'child_of' => $parent_cat_id, // 取得全部下階
]);
foreach ($child_categories as $cat) {
echo $cat->term_id . ' - ' . $cat->name . '<br>';
}
?>這是另一種意思:不是找「分類的子分類」,而是找「menu 某主選單底下的子 menu 項目」。
<?php
$menu_name = 'main-menu';
$target_menu_title = '產品分類';
$menu_items = wp_get_nav_menu_items($menu_name);
$parent_menu_id = 0;
$child_menu_categories = [];
if ($menu_items) {
foreach ($menu_items as $item) {
if ($item->title === $target_menu_title) {
$parent_menu_id = $item->ID;
break;
}
}
if ($parent_menu_id) {
foreach ($menu_items as $item) {
if ((int) $item->menu_item_parent === $parent_menu_id && $item->object === 'category') {
$child_menu_categories[] = get_term((int) $item->object_id, 'category');
}
}
}
}
echo '<pre>';
print_r($child_menu_categories);
echo '</pre>';
?>用 get_terms():
child_of = 取得全部下層parent = 只取直屬子類別用 wp_get_nav_menu_items() 搭配:
menu_item_parentobject === 'category'