array_map(fn($m)=>['id'=>$m->term_id,'name'=>$m->name,'slug'=>$m->slug,'count'=>$m->count],$menus)]; } public static function getMenu(array $args): array { $items = wp_get_nav_menu_items($args['menu']); if (!$items) throw new \RuntimeException("Menu not found or empty: {$args['menu']}"); return ['items'=>array_map(fn($i)=>['id'=>$i->ID,'title'=>$i->title,'url'=>$i->url,'parent'=>(int)$i->menu_item_parent,'order'=>(int)$i->menu_order,'type'=>$i->type,'object'=>$i->object,'object_id'=>(int)$i->object_id],$items)]; } public static function updateMenuItem(array $args): array { $data = ['menu-item-title'=>$args['title'],'menu-item-url'=>$args['url'],'menu-item-status'=>'publish']; if (!empty($args['parent'])) $data['menu-item-parent-id'] = (int)$args['parent']; if (!empty($args['position'])) $data['menu-item-position'] = (int)$args['position']; $item_id = !empty($args['item_id']) ? (int)$args['item_id'] : 0; $id = wp_update_nav_menu_item($args['menu'], $item_id, $data); if (is_wp_error($id)) throw new \RuntimeException($id->get_error_message()); return ['id'=>$id,'menu'=>$args['menu']]; } }