Onglet de réglages WooCommerce

Voici une classe PHP vous permettant d’ajouter une page de réglages dans l’administration de WooCommerce, ainsi que d’utiliser l’API de formulaire et d’enregistrement.

class WC_Settings_Tab_Kodex {

	const TEXT_DOMAIN = 'kodex'; // text-domain pour les traductions
	const SETTING_TAB = 'settings_kodex'; // identifiant : url, nom des options, hooks
	
	public static function hooks(){
		add_filter('woocommerce_settings_tabs_array', array(__CLASS__, 'add_settings_tab'), 50);
		add_action('woocommerce_settings_tabs_'.self::SETTING_TAB, array(__CLASS__, 'display_settings'));
		add_action('woocommerce_update_options_'.self::SETTING_TAB, array(__CLASS__, 'update_settings'));
	}

	// Déclaration de l'onglet
	public static function add_settings_tab($settings_tabs){
		$settings_tabs[self::SETTING_TAB] = "Kodex";
		return $settings_tabs;
	}

	// Déclaration des champs
	public static function display_settings(){
		woocommerce_admin_fields( self::get_settings() );
	}

	// enregistrement des champs
	public static function update_settings(){
   		$settings = self::get_settings();
		unset($settings['section_title']);
		unset($settings['section_end']);
		woocommerce_update_options( $settings );
	}

	// Définition des champs
	// @see woocommerce_admin_fields(
	public static function get_settings(){
		$settings = array(
			'section_title' => array(
				'name' => __("Options Kodex", self::TEXT_DOMAIN),
				'type' => 'title',
				'desc' => '',
			),
			'title' => array(
				'name' => __("Titre", self::TEXT_DOMAIN),
				'type' => 'text',
				'desc' => "",
			),
			'description' => array(
				'name' => __("Description", self::TEXT_DOMAIN),
				'type' => 'textarea',
				'desc' => "",
			),
			'countries' => array(
				'name'    => __("Pays", self::TEXT_DOMAIN),
				'type'    => 'multiselect',
				'options' => WC()->countries->get_countries(),
				'class'   => 'wc-enhanced-select',
				'desc'    => ""
			),
			'section_end' => array(
				'type' => 'sectionend',
			)
		);

		foreach($settings as $k=>$v){
			$settings[$k]['id'] = 'wc_'.self::SETTING_TAB.'_'.$k;
		}

		return apply_filters('wc_'.self::SETTING_TAB.'_settings', $settings);
	}

	// Obtenir la valeur d'une option
	// Usage : $title = WC_Settings_Tab_Kodex::get_setting('title');
	public static function get_setting($name){
		return get_option('wc_'.self::SETTING_TAB.'_'.$name);
	}

}

WC_Settings_Tab_Kodex::hooks();

Source : How to Add a WooCommerce Settings Tab