UPDATE :
as the incorrect menu was called in a specific node template (node--header-fragment.html.twig), i went to hook_preprocess_page to see if i could find a new lead :
function hook_preprocess_node(array &$variables) { $node = isset($variables["elements"]["#node"]) ? $variables["elements"]["#node"] : false; $variables['nid'] = 0; if ($node) { if (isset($variables["elements"]["#node"]) && $node !== null && $node->id()) { $variables['nid'] = $node->id(); $node_type = $node->getType(); $function = __FUNCTION__ . '_' . $node_type; if (function_exists($function)) { $function($variables); } } } $variables['request_uri'] = $_SERVER['REQUEST_URI']; $url = Drupal::service('path_alias.manager') ->getAliasByPath(\Drupal::service('path.current')->getPath()); $variables["current_url"] = $url; if (in_array($url, ["/ap/nav/header", "/ap/footer"])) { if ($url == "/ap/nav/header") { // <-- URL of node that renders the menu $menu_name = 'menu-alta-big-menu'; $menu_tree = \Drupal::menuTree(); $parameters = $menu_tree->getCurrentRouteMenuTreeParameters($menu_name); $tree = $menu_tree->load($menu_name, $parameters); $manipulators = array(array('callable' => 'menu.default_tree_manipulators:checkAccess'), array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort'),); $tree = $menu_tree->transform($tree, $manipulators); $menu = $menu_tree->build($tree); dump($tree); dump($menu); exit(); $variables['elements']['mymenu'] = $menu; } $config = Drupal::config('ap_commons.settings'); $variables['footer_social_1'] = $config->get('ap_commons_footer_social_1'); $variables['footer_social_2'] = $config->get('ap_commons_footer_social_2'); $variables['footer_accroche_1'] = $config->get('ap_commons_footer_accroche_1'); $variables['footer_accroche_2'] = $config->get('ap_commons_footer_accroche_2'); $variables['footer_accroche_3'] = $config->get('ap_commons_footer_accroche_3'); $variables['footer_accroche_4'] = $config->get('ap_commons_footer_accroche_4'); $variables['simulation_texte'] = $config->get('ap_commons_simulation_texte'); $variables['souscrire_texte'] = $config->get('ap_commons_souscrire_texte'); } } Turns out the whole-menu is re-rendered via \Drupal::menuTree(), using manipulators. the dump of the unordered tree contains my 2 items, but the ordered menu generated by $menu = $menu_tree->build($tree); doesn't