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'];
}
}
}