determine_parent_slug(); $capability = $this->determine_parent_cap(); add_menu_page( __( 'Senti', 'senti-feedback' ), __( 'Senti', 'senti-feedback' ), $capability, $parent_slug, $parent_slug === 'senti-settings' ? [ $this, 'render_settings' ] : '', 'dashicons-megaphone', 58 ); add_submenu_page( $parent_slug, __( 'Subscribers', 'senti-feedback' ), __( 'Subscribers', 'senti-feedback' ), Capabilities::MANAGE_SUBSCRIBERS, 'senti-subscribers', [ $this, 'render_subscribers' ] ); add_submenu_page( $parent_slug, __( 'Senti settings', 'senti-feedback' ), __( 'Settings', 'senti-feedback' ), Capabilities::MANAGE_SETTINGS, 'senti-settings', [ $this, 'render_settings' ] ); } private function determine_parent_slug(): string { $settings = $this->plugin_settings ?? new Settings(); if ( $settings->is_module_active( Settings::MODULE_FEEDBACK ) ) { return 'edit.php?post_type=senti_feedback'; } if ( $settings->is_module_active( Settings::MODULE_ROADMAP ) ) { return 'edit.php?post_type=senti_roadmap'; } if ( $settings->is_module_active( Settings::MODULE_CHANGELOG ) ) { return 'edit.php?post_type=senti_release'; } return 'senti-settings'; } private function determine_parent_cap(): string { $settings = $this->plugin_settings ?? new Settings(); if ( $settings->is_module_active( Settings::MODULE_FEEDBACK ) ) { return Capabilities::EDIT_FEEDBACKS; } if ( $settings->is_module_active( Settings::MODULE_ROADMAP ) ) { return Capabilities::EDIT_ROADMAPS; } if ( $settings->is_module_active( Settings::MODULE_CHANGELOG ) ) { return Capabilities::EDIT_RELEASES; } return Capabilities::MANAGE_SETTINGS; } /** * @internal Hook callback. */ public function render_subscribers(): void { $this->subscribers->render(); } /** * @internal Hook callback. */ public function render_settings(): void { $this->settings->render(); } }