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: |
|
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!