WP Admin Submenus
Adds submenus to WordPress admin for quick access to posts, taxonomies, and users. Configurable via Settings.
by David Brabyn · github.com/dbrabyn/wp-admin-submenus · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/dbrabyn/wp-admin-submenus/archive/refs/heads/main.zipReadme
WP Admin Submenus
A performant, robust, and secure WordPress plugin that adds intelligent submenus to the WordPress admin for quick access to posts, taxonomies, and users.
Features
- Smart Submenus: Automatically adds submenus to post types, taxonomies, and user roles for quick access
- Configurable: Settings page to enable/disable submenus for specific post types
- Performance Optimized: Efficient queries with proper caching and no persistent object cache issues
- Polylang Compatible: Automatically filters content by default language when Polylang is active
- Secure: Built with WordPress security best practices (nonces, sanitization, capability checks)
- Responsive Design: Scrollable submenus with clean, accessible styling
- Automatic Updates: Integrates with GitHub releases for seamless plugin updates
Installation
- Upload the plugin files to
/wp-content/plugins/wp-admin-submenus/ - Activate the plugin through the 'Plugins' menu in WordPress
- Go to Settings > Admin Submenus to configure which post types should have submenus
Automatic Updates
This plugin uses the Plugin Update Checker library to enable automatic updates from GitHub releases.
How it works:
- The plugin automatically checks for new releases on GitHub
- When a new version is released, WordPress will notify you in the Plugins page
- You can update directly from your WordPress admin, just like WordPress.org plugins
- No manual downloading or uploading required
For developers:
- Create a new release on GitHub with a version tag (e.g.,
v1.0.1) - The plugin will automatically detect the new version
- Users will be notified and can update with one click
Configuration
Settings Page
Navigate to Settings > Admin Submenus to configure:
- Enable Submenus For: Select which post types should display submenus (all eligible post types are enabled by default)
- Items Per Menu: Set the maximum number of items to show before the "See more" link appears (default: 20)
Default Behavior
- All content post types are enabled by default (except core WordPress types like posts, attachments, revisions, etc.)
- Post types must be either public (front-end content) OR have a top-level admin menu (
show_in_menu === true) to be included - This allows both public content types and internal admin-only post types while filtering out plugin configuration screens
- Shows up to 20 items per submenu
- Automatically excludes internal/system post types:
- Core WordPress internal types (blocks, templates, navigation, etc.)
- ACF internal types (field groups, fields, post types, taxonomies, options pages)
- Formidable Forms internal types
- Ninja Forms submissions
- Taxonomies and user roles are always shown (following the same exclusion rules)
Filters
wp_admin_submenus_excluded_post_types
Filter the list of post types to exclude from submenus:
add_filter('wp_admin_submenus_excluded_post_types', function($excluded) {
$excluded[] = 'my_custom_post_type';
return $excluded;
});
wp_admin_submenus_excluded_taxonomies
Filter the list of taxonomies to exclude from submenus:
add_filter('wp_admin_submenus_excluded_taxonomies', function($excluded) {
$excluded[] = 'my_custom_taxonomy';
return $excluded;
});
wp_admin_submenus_desc_sorted_post_types
Specify post types that should be sorted in descending order (useful for year-based content):
add_filter('wp_admin_submenus_desc_sorted_post_types', function($post_types) {
$post_types[] = 'yearly_reports';
return $post_types;
});
Security Features
- Capability Checks: All menu items respect WordPress capabilities
- Nonce Verification: Settings page uses WordPress Settings API with automatic nonce handling
- Input Sanitization: All user input is properly sanitized
- Output Escaping: All output is escaped to prevent XSS attacks
- Direct Access Prevention: Blocks direct file access
Performance Optimizations
- Efficient Queries: Uses
no_found_rows, disables meta/term cache updates when not needed - Smart Pagination: Fetches
limit + 1items to efficiently determine if "See more" is needed - Static Caching: Configuration cached per request to prevent redundant calculations
- No Persistent Cache: Avoids Object Cache Pro compatibility issues
Translation (i18n)
The plugin is fully translation-ready and includes:
- Text Domain:
wp-admin-submenus - Translation Template:
languages/wp-admin-submenus.pot- Use this as a base for new translations - Included Translations:
- French (
fr_FR) - Spanish (
es_ES) - German (
de_DE)
- French (
For Translators
- Copy
languages/wp-admin-submenus.pottolanguages/wp-admin-submenus-{locale}.po - Translate the strings using a tool like Poedit or your preferred translation editor
- Compile the
.pofile to.mousingmsgfmtor the included script:cd languages bash compile-translations.sh
Accessibility
The plugin follows WCAG 2.1 Level AA accessibility guidelines:
- ARIA Labels: All form controls have proper ARIA labels for screen readers
- Keyboard Navigation: Full keyboard accessibility throughout
- Semantic HTML: Proper use of fieldsets, legends, and form labels
- Screen Reader Support: Hidden labels and descriptions for assistive technologies
Requirements
- WordPress 5.0 or higher
- PHP 7.4 or higher
License
GPL v2 or later
Support
For issues and feature requests, please use the GitHub issue tracker.
Read the full README on GitHub →
Releases
| Tag | Published |
|---|---|
| 1.0.18 | Feb 17, 2026 |
| v1.0.17 | Feb 14, 2026 |
| v1.0.15 | Nov 25, 2025 |
| v1.0.13 | Nov 22, 2025 |
| v1.0.11 | Nov 11, 2025 |
| v1.0.10 | Nov 11, 2025 |
| v1.0.7 | Nov 11, 2025 |
| v1.0.6 | Nov 9, 2025 |
| v1.0.5 | Nov 9, 2025 |
| v1.0.4 | Nov 9, 2025 |
| v1.0.3 | Nov 9, 2025 |
| v1.0.2 | Nov 9, 2025 |
| v1.0.1 | Nov 9, 2025 |
| v1.0.0 | Nov 9, 2025 |
These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.