The customize_dynamic_setting_class WordPress PHP filter allows non-statically created settings to be constructed with a custom WP_Customize_Setting subclass.
Usage
add_filter('customize_dynamic_setting_class', 'your_function_name', 10, 3);
function your_function_name($setting_class, $setting_id, $setting_args) {
// your custom code here
return $setting_class;
}
Parameters
$setting_class: string, WP_Customize_Setting or a subclass.$setting_id: string, ID for dynamic setting, usually coming from $_POST[‘customized’].$setting_args: array, WP_Customize_Setting or a subclass.
More information
See WordPress Developer Resources: customize_dynamic_setting_class
Examples
Use custom class for specific setting id
Create a custom class for a specific setting id and apply it using the filter.
class My_Custom_Setting extends WP_Customize_Setting {
// Custom functionality here
}
add_filter('customize_dynamic_setting_class', 'use_custom_setting_class', 10, 3);
function use_custom_setting_class($setting_class, $setting_id, $setting_args) {
if ('my_custom_setting_id' === $setting_id) {
$setting_class = 'My_Custom_Setting';
}
return $setting_class;
}
Change setting class based on setting type
Apply a different custom class for different types of settings.
class Custom_Text_Setting extends WP_Customize_Setting {}
class Custom_Color_Setting extends WP_Customize_Setting {}
add_filter('customize_dynamic_setting_class', 'change_setting_class_based_on_type', 10, 3);
function change_setting_class_based_on_type($setting_class, $setting_id, $setting_args) {
if (isset($setting_args['type'])) {
if ('text' === $setting_args['type']) {
$setting_class = 'Custom_Text_Setting';
} elseif ('color' === $setting_args['type']) {
$setting_class = 'Custom_Color_Setting';
}
}
return $setting_class;
}
Add a prefix to setting ids
Add a prefix to all setting ids using the filter.
add_filter('customize_dynamic_setting_class', 'add_prefix_to_setting_ids', 10, 3);
function add_prefix_to_setting_ids($setting_class, $setting_id, $setting_args) {
$prefix = 'my_prefix_';
$setting_id = $prefix . $setting_id;
return $setting_class;
}
Modify setting class based on post type
Change the setting class based on the post type of the associated setting.
class Custom_Post_Type_Setting extends WP_Customize_Setting {}
add_filter('customize_dynamic_setting_class', 'modify_class_based_on_post_type', 10, 3);
function modify_class_based_on_post_type($setting_class, $setting_id, $setting_args) {
if (isset($setting_args['post_type']) && 'custom_post_type' === $setting_args['post_type']) {
$setting_class = 'Custom_Post_Type_Setting';
}
return $setting_class;
}
Conditionally disable a setting
Disable a specific setting based on a condition.
add_filter('customize_dynamic_setting_class', 'conditionally_disable_setting', 10, 3);
function conditionally_disable_setting($setting_class, $setting_id, $setting_args) {
if ('disable_this_setting_id' === $setting_id && some_condition()) {
$setting_class = false; // Disable the setting by setting the class to false
}
return $setting_class;
}
function some_condition() {
// Your custom condition logic here
return true; // Replace with your actual condition
}