--- post_title: Settings API --- The WooCommerce Settings API is used by extensions to display, save, and load settings. The best way to make use of the API in your extension is to create a class that extends the `WC_Settings_API` class: ```php class My_Extension_Settings extends WC_Settings_API { // } ``` ## Defining form fields You can define your fields using a method called `init_form_fields` in your class constructor: ```php $this->init_form_fields(); ``` You must have your settings defined before you can load them. Setting definitions go in the `form_fields` array: ```php /** * Initialise gateway settings form fields. */ function init_form_fields() { $this->form_fields = array( 'title' => array( 'title' => __( 'Title', 'your-text-domain' ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', 'your-text-domain' ), 'default' => __( 'PayPal', 'your-text-domain' ) ), 'description' => array( 'title' => __( 'Description', 'your-text-domain' ), 'type' => 'textarea', 'description' => __( 'This controls the description which the user sees during checkout.', 'your-text-domain' ), 'default' => __( "Pay via PayPal; you can pay with your credit card if you don't have a PayPal account", 'your-text-domain' ) ) ); } // End init_form_fields() ``` (Make sure your class initializes the `form_fields` property so that the "Creation of dynamic property" error is not thrown in PHP 8.2+) In the above example we define two settings, Title and Description. Title is a text box, whereas Description is a textarea. Notice how you can define a default value and a description for the setting itself. Setting definitions use the following format: ```php 'setting_name' => array( 'title' => 'Title for your setting shown on the settings page', 'description' => 'Description for your setting shown on the settings page', 'type' => 'text|password|textarea|checkbox|select|multiselect', 'default' => 'Default value for the setting', 'class' => 'Class for the input element', 'css' => 'CSS rules added inline on the input element', 'label' => 'Label', // For checkbox inputs only. 'options' => array( // Array of options for select/multiselect inputs only. 'key' => 'value' ), ) ``` ## Displaying your settings Create a method called `admin_options` containing the following: ```php function admin_options() { ?>

generate_settings_html(); ?>
init_settings(); ``` After that you can load your settings from the settings API. The `init_settings` method above populates the settings variable for you: ```php // Define user set variables $this->title = $this->settings['title']; $this->description = $this->settings['description']; ```