register_settings(); $this->setup_admin_notices(); } /** * Enqueue admin scripts and styles. * * @since 1.0.0 * @param string $hook_suffix Current admin page hook suffix. * @return void */ public function enqueue_admin_scripts( string $hook_suffix ): void { if ( ! $this->is_current_page( $hook_suffix ) ) { return; } $this->enqueue_scripts(); $this->enqueue_styles(); } /** * Render admin page. * * @since 1.0.0 * @return void */ abstract public function render_page(): void; /** * Register settings. * * @since 1.0.0 * @return void */ abstract protected function register_settings(): void; /** * Enqueue scripts. * * @since 1.0.0 * @return void */ abstract protected function enqueue_scripts(): void; /** * Enqueue styles. * * @since 1.0.0 * @return void */ abstract protected function enqueue_styles(): void; /** * Check if current page matches this controller. * * @since 1.0.0 * @param string $hook_suffix Hook suffix. * @return bool True if current page. */ protected function is_current_page( string $hook_suffix ): bool { return false !== strpos( $hook_suffix, $this->page_slug ); } /** * Setup admin notices. * * @since 1.0.0 * @return void */ protected function setup_admin_notices(): void { add_action( 'admin_notices', array( $this, 'display_admin_notices' ) ); } /** * Display admin notices. * * @since 1.0.0 * @return void */ public function display_admin_notices(): void { // Override in child classes if needed. } /** * Get default configuration. * * @since 1.0.0 * @return array Default configuration. */ protected function get_default_config(): array { return array( 'page_slug' => $this->page_slug, 'page_title' => $this->page_title, 'menu_title' => $this->menu_title, 'capability' => $this->capability, ); } }