WC_Admin_Settings::save_fields PHP Method

save_fields() public static method

Loops though the woocommerce options array and outputs each field.
public static save_fields ( array $options, array $data = null ) : boolean
$options array Options array to output
$data array Optional. Data to use for saving. Defaults to $_POST.
return boolean
        public static function save_fields($options, $data = null)
        {
            if (is_null($data)) {
                $data = $_POST;
            }
            if (empty($data)) {
                return false;
            }
            // Options to update will be stored here and saved later.
            $update_options = array();
            // Loop options and get values to save.
            foreach ($options as $option) {
                if (!isset($option['id']) || !isset($option['type'])) {
                    continue;
                }
                // Get posted value.
                if (strstr($option['id'], '[')) {
                    parse_str($option['id'], $option_name_array);
                    $option_name = current(array_keys($option_name_array));
                    $setting_name = key($option_name_array[$option_name]);
                    $raw_value = isset($data[$option_name][$setting_name]) ? wp_unslash($data[$option_name][$setting_name]) : null;
                } else {
                    $option_name = $option['id'];
                    $setting_name = '';
                    $raw_value = isset($data[$option['id']]) ? wp_unslash($data[$option['id']]) : null;
                }
                // Format the value based on option type.
                switch ($option['type']) {
                    case 'checkbox':
                        $value = '1' === $raw_value || 'yes' === $raw_value ? 'yes' : 'no';
                        break;
                    case 'textarea':
                        $value = wp_kses_post(trim($raw_value));
                        break;
                    case 'multiselect':
                    case 'multi_select_countries':
                        $value = array_filter(array_map('wc_clean', (array) $raw_value));
                        break;
                    case 'image_width':
                        $value = array();
                        if (isset($raw_value['width'])) {
                            $value['width'] = wc_clean($raw_value['width']);
                            $value['height'] = wc_clean($raw_value['height']);
                            $value['crop'] = isset($raw_value['crop']) ? 1 : 0;
                        } else {
                            $value['width'] = $option['default']['width'];
                            $value['height'] = $option['default']['height'];
                            $value['crop'] = $option['default']['crop'];
                        }
                        break;
                    case 'select':
                        $allowed_values = empty($option['options']) ? array() : array_keys($option['options']);
                        if (empty($option['default']) && empty($allowed_values)) {
                            $value = null;
                            break;
                        }
                        $default = empty($option['default']) ? $allowed_values[0] : $option['default'];
                        $value = in_array($raw_value, $allowed_values) ? $raw_value : $default;
                        break;
                    default:
                        $value = wc_clean($raw_value);
                        break;
                }
                /**
                 * Fire an action when a certain 'type' of field is being saved.
                 * @deprecated 2.4.0 - doesn't allow manipulation of values!
                 */
                if (has_action('woocommerce_update_option_' . sanitize_title($option['type']))) {
                    wc_deprecated_function('The woocommerce_update_option_X action', '2.4.0', 'woocommerce_admin_settings_sanitize_option filter');
                    do_action('woocommerce_update_option_' . sanitize_title($option['type']), $option);
                    continue;
                }
                /**
                 * Sanitize the value of an option.
                 * @since 2.4.0
                 */
                $value = apply_filters('woocommerce_admin_settings_sanitize_option', $value, $option, $raw_value);
                /**
                 * Sanitize the value of an option by option name.
                 * @since 2.4.0
                 */
                $value = apply_filters("woocommerce_admin_settings_sanitize_option_{$option_name}", $value, $option, $raw_value);
                if (is_null($value)) {
                    continue;
                }
                // Check if option is an array and handle that differently to single values.
                if ($option_name && $setting_name) {
                    if (!isset($update_options[$option_name])) {
                        $update_options[$option_name] = get_option($option_name, array());
                    }
                    if (!is_array($update_options[$option_name])) {
                        $update_options[$option_name] = array();
                    }
                    $update_options[$option_name][$setting_name] = $value;
                } else {
                    $update_options[$option_name] = $value;
                }
                /**
                 * Fire an action before saved.
                 * @deprecated 2.4.0 - doesn't allow manipulation of values!
                 */
                do_action('woocommerce_update_option', $option);
            }
            // Save all options in our array.
            foreach ($update_options as $name => $value) {
                update_option($name, $value);
            }
            return true;
        }

Usage Example

 /**
  * Save settings.
  *
  * Save settings based on WooCommerce save_fields() method.
  *
  * @since 1.0.0
  */
 public function update_options()
 {
     global $current_section;
     if ($current_section == 'shipping_validation') {
         WC_Admin_Settings::save_fields($this->get_settings());
     }
 }
All Usage Examples Of WC_Admin_Settings::save_fields