Make WordPress Core

Opened 5 weeks ago

#64834 new defect (bug)

Bug Report / UX Issue: Taxonomy Hierarchy Flattens and Breaks in Nav Menu "View All" Tab Due to Pagination

Reported by: grafimangr's profile grafimangr Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 6.9.1
Component: Menus Keywords:
Focuses: ui Cc:

Description

Hi there!
Description of the Issue:
There is a long-standing UX issue in the WordPress admin panel regarding the Appearance > Menus (nav-menus.php) screen. When a user tries to add terms from a hierarchical taxonomy (such as WooCommerce Product Categories or standard Post Categories) to a menu, the visual parent-child hierarchy breaks completely if the number of terms exceeds the pagination limit.
​In the "View All" tab of the taxonomy meta box, instead of displaying the correct indented tree structure, WordPress renders a completely flat list. This makes it nearly impossible for site admins to identify which child category belongs to which parent, especially on e-commerce sites with hundreds of nested categories.
​Expected Behavior:
The visual hierarchy should be maintained, displaying like this:
​Category
​Sub-category 1
​Sub-category 2
​Sub-sub-category 1
​Actual Behavior:
The hierarchy is stripped, and items are displayed as a flat list:
​Category
​Sub-category 1
​Sub-category 2
​Sub-sub-category 1
​Steps to Reproduce:
​Create a hierarchical taxonomy (e.g., standard categories or WooCommerce product categories).
​Generate a large number of terms (e.g., 50+ terms) with multiple levels of parent-child relationships.
​Navigate to Appearance > Menus.
​Open the meta box for that specific taxonomy and click on the "View All" tab.
​Notice that the pagination kicks in and the terms are listed flatly without any hierarchical indentation.
​Technical Root Cause:
The issue stems from how wp_terms_checklist() and the Walker_Nav_Menu_Checklist handle large datasets. When the number of terms exceeds the default limit, pagination ('number' and 'offset' arguments in get_terms) is applied.
​Because a child term might end up on a different pagination page than its parent, the walker cannot reliably build the tree. As a fallback, WordPress abandons the hierarchical structure and outputs a flat list to prevent "orphan" child terms from breaking the HTML structure.
​Impact:
This causes a massive workflow bottleneck for users managing large sites, specifically WooCommerce stores with complex product catalogs. Users are forced to guess which "T-Shirts" sub-category belongs to "Men" and which belongs to "Women" since they both look identical in the flat list.
​Proposed Solutions:
​AJAX-based Tree Loading: Implement a lazy-loading tree structure (similar to modern UI frameworks) where clicking a parent expands its children dynamically, bypassing the need for standard pagination.
​Disable Pagination for Hierarchical Taxonomies: Introduce a filter or core toggle that allows hierarchical taxonomies to bypass the number limit entirely in the nav menu meta box, rendering the full tree at once.
​Contextual Parent Labels: If flattening is absolutely necessary for performance, append the parent name to the child term in the UI (e.g., Sub-category 1 (Parent: Category)).
​Thank you for looking into this long-standing friction point in the WordPress admin experience!

Change History (0)

Note: See TracTickets for help on using tickets.