Add a custom WooCommerce settings tab with sections

Hello AJT Please find an attached solution & if you are still facing an issue let me know.

1) To add a setting tab with sections, you can firstly use the woocommerce_settings_tabs_array filter hook:

// Add the tab to the tabs array
function filter_woocommerce_settings_tabs_array( $settings_tabs ) {
    $settings_tabs['my-custom-tab'] = __( 'My custom tab', 'woocommerce' );

    return $settings_tabs;
}
add_filter( 'woocommerce_settings_tabs_array', 'filter_woocommerce_settings_tabs_array', 99 );

2) To add new sections to the page, you can use the woocommerce_sections_{$current_tab} composite hook where {$current_tab} need to be replaced by the key slug that is set in the first function:

// Add new sections to the page
add_action( 'woocommerce_sections_my-custom-tab', 'action_woocommerce_sections_my_custom_tab', 10 );
function action_woocommerce_sections_my_custom_tab() {
    global $current_section;
    $tab_id = 'my-custom-tab';
    // Must contain more than one section to display the links
    // Make first element's key empty ('')
    $sections = array(
        ''              => __( 'Overview', 'woocommerce' ),
        'my-section-1'  => __( 'My section 1', 'woocommerce' ),
        'my-section-2'  => __( 'My section 2', 'woocommerce' )
    );
    echo '<ul class="subsubsub">';
    $array_keys = array_keys( $sections );
    foreach ( $sections as $id => $label ) {
        echo '<li><a href="' . admin_url( 'admin.php?page=wc-settings&tab=' . $tab_id . '&section=' . sanitize_title( $id ) ) . '" class="' . ( $current_section == $id ? 'current' : '' ) . '">' . $label . '</a> ' . ( end( $array_keys ) == $id ? '' : '|' ) . ' </li>';
    }
    echo '</ul><br class="clear" />';
}

3) For adding the settings, as well as for processing/saving, we will use a custom function, which we will then call:

// Settings function
function get_custom_settings() {
    global $current_section;
    $settings = array();
    if ( $current_section == 'my-section-1' ) {
        // My section 1
        $settings = array(
            // Title
            array(
                'title'     => __( 'Your title 1', 'woocommerce' ),
                'type'      => 'title',
                'id'        => 'custom_settings_1'
            ),
            // Text
            array(
                'title'     => __( 'Your title 1.1', 'text-domain' ),
                'type'      => 'text',
                'desc'      => __( 'Your description 1.1', 'woocommerce' ),
                'desc_tip'  => true,
                'id'        => 'custom_settings_1_text',
                'css'       => 'min-width:300px;'
            ),
            // Select
            array(
                'title'     => __( 'Your title 1.2', 'woocommerce' ),
                'desc'      => __( 'Your description 1.2', 'woocommerce' ),
                'id'        => 'custom_settings_1_select',
                'class'     => 'wc-enhanced-select',
                'css'       => 'min-width:300px;',
                'default'   => 'aa',
                'type'      => 'select',
                'options'   => array(
                    'aa'        => __( 'aa', 'woocommerce' ),
                    'bb'        => __( 'bb', 'woocommerce' ),
                    'cc'        => __( 'cc', 'woocommerce' ),
                    'dd'        => __( 'dd', 'woocommerce' ),
                ),
                'desc_tip' => true,
            ),
            // Section end
            array(
                'type'      => 'sectionend',
                'id'        => 'custom_settings_1'
            ),
        );
    } elseif ( $current_section == 'my-section-2' ) {
        // My section 2
        $settings = array(
            // Title
            array(
                'title'     => __( 'Your title 2', 'woocommerce' ),
                'type'      => 'title',
                'id'        => 'custom_settings_2'
            ),
            // Text
            array(
                'title'     => __( 'Your title 2.2', 'text-domain' ),
                'type'      => 'text',
                'desc'      => __( 'Your description 2.1', 'woocommerce' ),
                'desc_tip'  => true,
                'id'        => 'custom_settings_2_text',
                'css'       => 'min-width:300px;'
            ),
            // Section end
            array(
                'type'      => 'sectionend',
                'id'        => 'custom_settings_2'
            ),
        );
    } else {
        // Overview
       $settings = array(
            // Title
            array(
                'title'     => __( 'Overview Title 1', 'woocommerce' ),
                'type'      => 'title',
                'id'        => 'overview_settings_1'
            ),
            // Text
            array(
                'title'     => __( 'overview title 1.1', 'text-domain' ),
                'type'      => 'text',
                'desc'      => __( 'overview description 1.1', 'woocommerce' ),
                'desc_tip'  => true,
                'id'        => 'overview_settings_1_text',
                'css'       => 'min-width:300px;'
            ),
            array(
                'type'      => 'sectionend',
                'id'        => 'custom_settings_1'
            ),
        );
    }
    return $settings;
}

3.1) Add settings, via the woocommerce_settings_{$current_tab} composite hook:

// Add settings
add_action( 'woocommerce_settings_my-custom-tab', 'action_woocommerce_settings_my_custom_tab', 10 );
function action_woocommerce_settings_my_custom_tab() {
    // Call settings function
    $settings = get_custom_settings();
    WC_Admin_Settings::output_fields( $settings );  
}

3.2) Process/save the settings, via the woocommerce_settings_save_{$current_tab} composite hook:

// Process/save the settings
add_action( 'woocommerce_settings_save_my-custom-tab', 'action_woocommerce_settings_save_my_custom_tab', 10 );
function action_woocommerce_settings_save_my_custom_tab() {
    global $current_section;
    $tab_id = 'my-custom-tab';
    // Call settings function
    $settings = get_custom_settings();
    WC_Admin_Settings::save_fields( $settings );
    if ( $current_section ) {
        do_action( 'woocommerce_update_options_' . $tab_id . '_' . $current_section );
    }
}

Result:

Default section of new tab
Default section of new tab

Section 1 of new tab
enter image description here

Section 2 of new tab
enter image description here