get_config(); self::$config[ $config_args['id'] ] = $config_args; } /** * Create a new panel. * * @static * @access public * @param string $id The ID for this panel. * @param array $args The panel arguments. */ public static function add_panel( $id = '', $args = [] ) { new \Kirki\Panel( $id, $args ); } /** * Remove a panel. * * @static * @access public * @since 3.0.17 * @param string $id The ID for this panel. */ public static function remove_panel( $id = '' ) { $panel = new \Kirki\Panel( $id ); $panel->remove(); } /** * Create a new section. * * @static * @access public * @param string $id The ID for this section. * @param array $args The section arguments. */ public static function add_section( $id, $args ) { new \Kirki\Section( $id, $args ); } /** * Remove a section. * * @static * @access public * @since 3.0.17 * @param string $id The ID for this section. */ public static function remove_section( $id = '' ) { $section = new \Kirki\Section( $id, $args ); $section->remove(); } /** * Create a new field. * * @static * @access public * @param string $config_id The configuration ID for this field. * @param array $args The field arguments. */ public static function add_field( $config_id, $args = [] ) { if ( doing_action( 'customize_register' ) ) { _doing_it_wrong( __METHOD__, esc_html__( 'Kirki fields should not be added on customize_register. Please add them directly, or on init.', 'kirki' ), '3.0.10' ); } parent::maybe_show_fontawesome_nag( $args ); // Early exit if 'type' is not defined. if ( ! isset( $args['type'] ) ) { return; } $args = self::migrate_css_vars( $args ); $str = str_replace( [ '-', '_' ], ' ', $args['type'] ); $classname = '\Kirki\Field\\' . str_replace( ' ', '_', ucwords( $str ) ); $config = Config::get_instance( $config_id )->get_config(); $args['kirki_config'] = isset( $args['kirki_config'] ) ? $args['kirki_config'] : $config_id; unset( $config['id'] ); $args = wp_parse_args( $args, $config ); if ( class_exists( $classname ) ) { unset( $args['type'] ); new $classname( $args ); return; } new Field( $config_id, $args ); } /** * Remove a control. * * @static * @access public * @since 3.0.17 * @param string $id The field ID. */ public static function remove_control( $id ) { if ( ! in_array( $id, self::$controls_to_remove, true ) ) { self::$controls_to_remove[] = $id; } } /** * Gets a parameter for a config-id. * * @static * @access public * @since 3.0.10 * @param string $id The config-ID. * @param string $param The parameter we want. * @return string */ public static function get_config_param( $id, $param ) { if ( ! isset( self::$config[ $id ] ) || ! isset( self::$config[ $id ][ $param ] ) ) { return ''; } return self::$config[ $id ][ $param ]; } /** * Migrate css-variables to output argument. * * This only exists for backwards-compatibility with the deprecated css-vars argument. * * @static * @since 4.0 * @param array $args The field arguments. * @return array */ private static function migrate_css_vars( $args ) { // Convert css_vars to output args. if ( isset( $args['css_vars'] ) ) { if ( isset( $args['transport'] ) && 'postMessage' === $args['transport'] ) { $args['transport'] = 'auto'; } // Convert to properly-formatted arrays. $args['css_vars'] = (array) $args['css_vars']; if ( isset( $args['css_vars'][0] ) && is_string( $args['css_vars'][0] ) ) { $args['css_vars'] = [ $args['css_vars'] ]; } foreach ( $args['css_vars'] as $css_var ) { $output = [ 'element' => ':root', 'property' => $css_var[0], ]; if ( isset( $css_var[1] ) ) { $output['value_pattern'] = $css_var[1]; } if ( isset( $css_var[2] ) ) { $output['choice'] = $css_var[2]; } $args['output'][] = $output; } } return $args; } }