WP_Customize_Setting::__construct( WP_Customize_Manager $manager, string $id, array $args = array() )

Constructor.


Description Description

Any supplied $args override class property defaults.


Top ↑

Parameters Parameters

$manager

(WP_Customize_Manager) (Required) Customizer bootstrap instance.

$id

(string) (Required) A specific ID of the setting. Can be a theme mod or option name.

$args

(array) (Optional) Array of properties for the new Setting object.

  • 'type'
    (string) Type of the setting. Default 'theme_mod'.
  • 'capability'
    (string) Capability required for the setting. Default 'edit_theme_options'
  • 'theme_supports'
    (string|string[]) Theme features required to support the panel. Default is none.
  • 'default'
    (string) Default value for the setting. Default is empty string.
  • 'transport'
    (string) Options for rendering the live preview of changes in Customizer. Using 'refresh' makes the change visible by reloading the whole preview. Using 'postMessage' allows a custom JavaScript to handle live changes. Default is 'refresh'.
  • 'validate_callback'
    (callable) Server-side validation callback for the setting's value.
  • 'sanitize_callback'
    (callable) Callback to filter a Customize setting value in un-slashed form.
  • 'sanitize_js_callback'
    (callable) Callback to convert a Customize PHP setting value to a value that is JSON serializable.
  • 'dirty'
    (bool) Whether or not the setting is initially dirty when created.

Default value: array()


Top ↑

Source Source

File: wp-includes/class-wp-customize-setting.php

	public function __construct( $manager, $id, $args = array() ) {
		$keys = array_keys( get_object_vars( $this ) );
		foreach ( $keys as $key ) {
			if ( isset( $args[ $key ] ) ) {
				$this->$key = $args[ $key ];
			}
		}

		$this->manager = $manager;
		$this->id      = $id;

		// Parse the ID for array keys.
		$this->id_data['keys'] = preg_split( '/\[/', str_replace( ']', '', $this->id ) );
		$this->id_data['base'] = array_shift( $this->id_data['keys'] );

		// Rebuild the ID.
		$this->id = $this->id_data['base'];
		if ( ! empty( $this->id_data['keys'] ) ) {
			$this->id .= '[' . implode( '][', $this->id_data['keys'] ) . ']';
		}

		if ( $this->validate_callback ) {
			add_filter( "customize_validate_{$this->id}", $this->validate_callback, 10, 3 );
		}
		if ( $this->sanitize_callback ) {
			add_filter( "customize_sanitize_{$this->id}", $this->sanitize_callback, 10, 2 );
		}
		if ( $this->sanitize_js_callback ) {
			add_filter( "customize_sanitize_js_{$this->id}", $this->sanitize_js_callback, 10, 2 );
		}

		if ( 'option' === $this->type || 'theme_mod' === $this->type ) {
			// Other setting types can opt-in to aggregate multidimensional explicitly.
			$this->aggregate_multidimensional();

			// Allow option settings to indicate whether they should be autoloaded.
			if ( 'option' === $this->type && isset( $args['autoload'] ) ) {
				self::$aggregated_multidimensionals[ $this->type ][ $this->id_data['base'] ]['autoload'] = $args['autoload'];
			}
		}
	}


Top ↑

Changelog Changelog

Changelog
Version Description
3.4.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by Prakash Rao

    WordPress Appearance -> Customize section follows this structure: Panels -> Sections -> Settings (which can have controls)

    We can add our custom Panels or We can add our sections in existing panels too. Below is the code to add a section in WooCommerce Panel, created default by WooCommerce.

    $wp_customize->add_section(
            'WPDOCS_SECTION_ID',
            array(
              'title'    => __( 'WPDOCS_SECTION_NAME', 'textdomain' ),
              'priority' => 20,
              'panel'    => 'woocommerce',
            )
          );

    Note: WPDOCS_SECTION_ID must be unique
    WPDOCS_SECTION_NAME as per your requirement

    Under each section you can add multiple settings. Code to add setting is:

    $wp_customize->add_setting(
            'WPDOCS_SETTING_ID',
            array(
              'default'              => 'no',
              'type'                 => 'option',
              'capability'           => 'manage_woocommerce',
              'sanitize_callback'    => 'wc_bool_to_string',
              'sanitize_js_callback' => 'wc_string_to_bool',
            )
          );

    Note: WPDOCS_SETTING_ID must be unique

    $wp_customize->add_setting basically creates a setting section. You will need the input controls under each setting section. Controls can be added under settings.

    code:

    $wp_customize->add_control(
            'WPDOCS_SETTING_ID',
            array(
              'label'    => __( 'WPDOCS_SETTING_LABEL', 'textdomain' ),
              'description' => __( 'WPDOCS_SETTING_DESC', 'textdomain' ), 
              'section'  => 'WPDOCS_SECTION_ID',
              'settings' => 'WPDOCS_SETTING_ID',
              'type'     => 'checkbox',
            )
          ); 

    Note: WPDOCS_SECTION_ID and WPDOCS_SETTING_ID are the ones we added above.

You must log in before being able to contribute a note or feedback.