page_title = $page_setup['title']; $this->page_id = $page_setup['id']; $this->page_slug = $page_setup['slug']; $this->page_tabs = $page_tabs; $this->page_tabs_nav = $page_tabs_nav; $this->addSettingsSectionsAndFields(); } private function addSettingsSectionsAndFields() { foreach ( $this->page_tabs as $tab ) { foreach ( $tab['sections'] as $section ) { add_settings_section( $section['id'], $section['title'], $section['callback'], $this->page_slug . '&tab=' . $tab['slug'] ); if( !empty($section['fields']) ) { foreach( $section['fields'] as $field ) { add_settings_field( $field['id'], $field['title'], function($args) use ($field) { $field_instance = new Field($args); echo wp_kses( $field_instance->render( $field['callback'] ), Sanitiser::allowedFieldTags() ); }, $this->page_slug . '&tab=' . $tab['slug'], $section['id'], array_merge($field['args'], [ 'label_for' => $field['id'], 'option_name' => $this->page_id ] ) ); } } } } } public function tabbed( ) { if ( isset( $_GET['settings-updated'] ) ) { add_settings_error( $this->page_id . '_messages', $this->page_id . '_message', 'Settings saved.', 'updated' ); } settings_errors( $this->page_id . '_messages' ); $current_tab = isset($_GET['tab']) ? sanitize_key($_GET['tab']) : array_key_first($this->page_tabs_nav); ?>