Using WordPress ‘customize_save_validation_before’ PHP action

The customize_save_validation_before WordPress PHP action fires before save validation happens, allowing plugins to add just-in-time filters for catching settings registered after customize_register.

Usage

add_action('customize_save_validation_before', 'my_custom_function');
function my_custom_function($manager) {
    // your custom code here
}

Parameters

  • $manager (WP_Customize_Manager) – The instance of the WP_Customize_Manager.

More information

See WordPress Developer Resources: customize_save_validation_before

Examples

Add a custom validation for a setting

Add a validation for the ‘my_custom_setting’ setting, checking if the value is a positive number.

add_action('customize_save_validation_before', 'add_my_custom_setting_validation');
function add_my_custom_setting_validation($manager) {
    $manager->get_setting('my_custom_setting')->transport = 'postMessage';
    add_filter("customize_validate_{$manager->get_setting('my_custom_setting')->id}", 'validate_my_custom_setting', 10, 2);
}

function validate_my_custom_setting($validity, $value) {
    if (!is_numeric($value) || $value < 0) {
        $validity->add('not_positive_number', 'Value should be a positive number.');
    }
    return $validity;
}

Add a custom validation for a text input

Add a custom validation for a text input, ensuring it is not empty.

add_action('customize_save_validation_before', 'add_text_input_validation');
function add_text_input_validation($manager) {
    add_filter("customize_validate_{$manager->get_setting('text_input')->id}", 'validate_text_input', 10, 2);
}

function validate_text_input($validity, $value) {
    if (empty($value)) {
        $validity->add('empty_input', 'Text input should not be empty.');
    }
    return $validity;
}

Add a custom validation for an email input

Add a custom validation for an email input, ensuring it is a valid email.

add_action('customize_save_validation_before', 'add_email_input_validation');
function add_email_input_validation($manager) {
    add_filter("customize_validate_{$manager->get_setting('email_input')->id}", 'validate_email_input', 10, 2);
}

function validate_email_input($validity, $value) {
    if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
        $validity->add('invalid_email', 'Please enter a valid email address.');
    }
    return $validity;
}

Add a custom validation for a URL input

Add a custom validation for a URL input, ensuring it is a valid URL.

add_action('customize_save_validation_before', 'add_url_input_validation');
function add_url_input_validation($manager) {
    add_filter("customize_validate_{$manager->get_setting('url_input')->id}", 'validate_url_input', 10, 2);
}

function validate_url_input($validity, $value) {
    if (!filter_var($value, FILTER_VALIDATE_URL)) {
        $validity->add('invalid_url', 'Please enter a valid URL.');
    }
    return $validity;
}