get_file()), [$this, 'plugin_action_links'], 10, 1); } private function get_menu_slug():string { return Plugin::instance()->get_id(); } private function get_menu_title():string { return Plugin::instance()->get_title(); } private function get_page_title():string { return sprintf( Plugin::__('%s Settings'), Plugin::instance()->get_title() ); } // Register settings page public function admin_menu():void { add_submenu_page( self::PARENT_SLUG, $this->get_page_title(), $this->get_menu_title(), self::CAPABILITY, $this->get_menu_slug(), [$this, 'render'] ); } // Register settings fields private function get_option_group():string { return Plugin::instance()->get_id(); } private function get_option_name():string { return Plugin::instance()->get_id(); } public function register_settings():void { register_setting($this->get_option_group(), $this->get_option_name(), [ 'type' => 'array', 'label' => $this->get_page_title(), 'sanitize_callback' => [$this, 'sanitize'], 'default' => [ 'client_id' => '', 'client_secret' => '', 'token' => '', ], ]); add_settings_section( 'api', Plugin::__('API Settings'), function () { printf( '

%s

', Plugin::__('See Issuu API documentation to learn how to generate an API client with your Issuu account.') ); }, $this->get_menu_slug() ); add_settings_field( 'client_id', Plugin::__('Client ID'), [$this, 'the_field'], $this->get_menu_slug(), 'api' ); add_settings_field( 'client_secret', Plugin::__('Client Secret'), [$this, 'the_field'], $this->get_menu_slug(), 'api' ); add_settings_field( 'token', Plugin::__('Token'), [$this, 'the_field'], $this->get_menu_slug(), 'api' ); } public function the_field(array $args):void { printf( '', esc_attr($args['name']), esc_attr($args['option_group']), esc_attr($args['name']), esc_attr($this->options[$args['name']] ?? '') ); if (isset($args['description']) && !empty($args['description'])) { printf('

%s

', esc_html($args['description'])); } } // Output settings page public function render():void { $this->options = get_option($this->get_option_group()); echo '
'; printf('

%s

', esc_html($this->get_page_title())); echo '
'; settings_fields($this->get_option_group()); do_settings_sections($this->get_menu_slug()); submit_button(); echo '
'; echo '
'; } // Add plugin link public function plugin_action_links(array $links):array { array_unshift($links, sprintf( '%s', esc_url($this->get_url()), Plugin::esc_html__('Settings') )); return $links; } public function get_url():string { return add_query_arg(array_filter([ 'page' => $this->get_menu_slug(), ]), admin_url(self::PARENT_SLUG)); } } Settings::instance();