<?php /** * Override field methods * * @package kirki-framework/control-generic * @copyright Copyright (c) 2023, Themeum * @license https://opensource.org/licenses/MIT * @since 1.0 */ namespace Kirki\Field; /** * Field overrides. * * @since 1.0 */ class Number extends Generic { /** * The field type. * * @access public * @since 1.0 * @var string */ public $type = 'kirki-number'; /** * Filter arguments before creating the setting. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_setting_args( $args, $wp_customize ) { if ( $args['settings'] !== $this->args['settings'] ) { return $args; } // Set the sanitize-callback if none is defined. if ( ! isset( $args['sanitize_callback'] ) || ! $args['sanitize_callback'] ) { $args['sanitize_callback'] = function( $value ) use ( $args ) { $value = filter_var( $value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); if ( isset( $args['choices'] ) && isset( $args['choices']['min'] ) && isset( $args['choices']['max'] ) ) { // Make sure min & max are all numeric. $min = filter_var( $args['choices']['min'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); $max = filter_var( $args['choices']['max'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); if ( $value < $min ) { $value = $min; } elseif ( $value > $max ) { $value = $max; } } return $value; }; } return $args; } /** * Filter arguments before creating the control. * * @access public * @since 0.1 * @param array $args The field arguments. * @param WP_Customize_Manager $wp_customize The customizer instance. * @return array */ public function filter_control_args( $args, $wp_customize ) { if ( $args['settings'] === $this->args['settings'] ) { $args = parent::filter_control_args( $args, $wp_customize ); // Set the control-type. $args['type'] = 'kirki-generic'; // Choices. $args['choices'] = isset( $args['choices'] ) ? $args['choices'] : []; $args['choices']['element'] = 'input'; $args['choices']['type'] = 'number'; $args['choices'] = wp_parse_args( $args['choices'], [ 'min' => -999999999, 'max' => 999999999, 'step' => 1, ] ); // Make sure min, max & step are all numeric. $args['choices']['min'] = filter_var( $args['choices']['min'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); $args['choices']['max'] = filter_var( $args['choices']['max'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); $args['choices']['step'] = filter_var( $args['choices']['step'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); } return $args; } }