kaiseki / wp-admin-menu
Customize the WordPress admin menu: reorder entries, add separators, and conditionally remove menu pages
Requires
- php: ^8.2
- kaiseki/config: ^2.0
- kaiseki/wp-context: ^1.0
- kaiseki/wp-env: ^1.0
- kaiseki/wp-hook: ^2.0
- psr/container: ^1.1 || ^2.0
Requires (Dev)
- bnf/phpstan-psr-container: ^1.1
- kaiseki/php-coding-standard: ^1.0
- maglnet/composer-require-checker: ^4.0
- php-stubs/wordpress-stubs: ^6.2
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^11.0
- roave/security-advisories: dev-latest
- roots/wordpress-core-installer: *
- roots/wordpress-no-content: @stable
- szepeviktor/phpstan-wordpress: ^2.0
- thecodingmachine/phpstan-safe-rule: ^1.4
This package is auto-updated.
Last update: 2026-06-02 23:45:43 UTC
README
Customize the WordPress admin menu: reorder entries, add separators, and conditionally remove menu pages.
Three kaiseki/wp-hook HookProviderInterfaces wired through ConfigProvider, all driven by the
admin_menu config key:
ChangeAdminMenuOrder— sets a custom top-level menu order; entries not listed are appended.AddAdminMenuSeparators— registers a number of named separators you can place in the order.RemoveAdminMenuPages— removes menu pages, optionally gated by akaiseki/wp-contextContextFilterInterface(e.g. by capability or context).
Installation
composer require kaiseki/wp-admin-menu
Requires PHP 8.2 or newer.
Usage
Register ConfigProvider with your laminas-style config aggregator, configure admin_menu, and
activate the providers via kaiseki/wp-hook:
use Kaiseki\WordPress\AdminMenu\AddAdminMenuSeparators; use Kaiseki\WordPress\AdminMenu\ChangeAdminMenuOrder; use Kaiseki\WordPress\AdminMenu\RemoveAdminMenuPages; return [ 'admin_menu' => [ // Custom top-level order; '{#}' is replaced by the next custom separator index. 'order' => [ 'index.php', 'custom-separator-{#}', 'edit.php', 'upload.php', ], 'separator_index_placeholder' => '{#}', 'debug' => false, 'additional_menu_separators' => [ 'count' => 1, 'prefix' => 'custom-separator-', ], // handle => true (always) | ContextFilter class-string | list of filters 'remove_menu_pages' => [ 'edit-comments.php' => true, ], ], 'hook' => [ 'provider' => [ AddAdminMenuSeparators::class, ChangeAdminMenuOrder::class, RemoveAdminMenuPages::class, ], ], ];
ConfigProvider registers a factory for each provider; they read their slice of admin_menu from the
container. Set admin_menu.debug to true to dump the computed order (on local/development
environments, detected via kaiseki/wp-env) while setting it up.
Development
composer install
composer check # check-deps, cs-check, phpstan
License
MIT — see LICENSE.