menuService = $menuService; // Dependency injected by PHP-DI $this->menu = $menu; } public function registerMenus(): void { // Hook into WordPress 'admin_menu' action add_action('admin_menu', [$this, 'addOptionsPages']); } public function addOptionsPages(): void { add_menu_page( 'IvyForms', 'IvyForms', // TODO - Add IvyForms capability 'read', 'ivyforms', null, // @phpstan-ignore argument.type IVYFORMS_URL . 'frontend/src/assets/images/logos/logo-only-admin.svg' ); foreach (($this->menu)() as $menu) { $this->handleMenuItem($menu); } remove_submenu_page('ivyforms', 'ivyforms'); } /** * * @param mixed[] $menu * */ public function handleMenuItem(array $menu): void { $this->addSubmenuPage( $menu['parentSlug'], $menu['pageTitle'], $menu['menuTitle'], $menu['capability'], $menu['menuSlug'], function () use ($menu) { $this->menuService->render($menu['menuSlug']); } ); } private function addSubmenuPage( string $parentSlug, string $pageTitle, string $menuTitle, string $capability, string $menuSlug, Closure $function ): void { add_submenu_page( $parentSlug, $pageTitle, $menuTitle, $capability, $menuSlug, $function ); } }