Using WordPress ‘customize_save_{$this->id_data[‘base’]}’ PHP action

The customize_save_{$this->id_data[‘base’]} WordPress action fires when the WP_Customize_Setting::save() method is called. The dynamic portion of the hook name, $this->id_data['base'], refers to the base slug of the setting name.


add_action( 'customize_save_example_setting', 'my_custom_function' );

function my_custom_function( $this ) {
  // Your custom code here


  • $this (WP_Customize_Setting): WP_Customize_Setting instance.

More information

See WordPress Developer Resources: customize_save_{$this->id_data[‘base’]}


Change site title after saving

Update the site title after saving the ‘blogname’ setting in the Customizer:

add_action( 'customize_save_blogname', 'update_site_title' );

function update_site_title( $this ) {
  // Update site title
  update_option( 'blogname', 'My Custom Site Title' );

Log when a theme color is saved

Log the time when the ‘header_textcolor’ setting is saved:

add_action( 'customize_save_header_textcolor', 'log_color_change' );

function log_color_change( $this ) {
  // Log the timestamp
  update_option( 'color_change_timestamp', time() );

Add a prefix to saved tagline

Add a prefix to the ‘blogdescription’ setting after it’s saved:

add_action( 'customize_save_blogdescription', 'add_prefix_to_tagline' );

function add_prefix_to_tagline( $this ) {
  // Get current tagline
  $current_tagline = get_option( 'blogdescription' );

  // Add prefix
  update_option( 'blogdescription', 'My Site: ' . $current_tagline );

Send an email when custom logo is updated

Send an email notification when the ‘custom_logo’ setting is updated:

add_action( 'customize_save_custom_logo', 'email_on_logo_change' );

function email_on_logo_change( $this ) {
  // Send an email notification
  wp_mail( '[email protected]', 'Logo Updated', 'The custom logo has been updated.' );

Reset custom CSS when the theme is changed

Reset the ‘custom_css’ setting when the ‘stylesheet’ setting is updated:

add_action( 'customize_save_stylesheet', 'reset_custom_css' );

function reset_custom_css( $this ) {
  // Reset custom CSS
  update_option( 'custom_css', '' );

Log changes to a custom background color setting

When the background color setting is changed, this example logs the new value.

add_action('customize_save_background_color', 'log_background_color_changes', 10, 1);

function log_background_color_changes($wp_customize_setting) {
  $new_value = $wp_customize_setting->post_value();
  error_log("Background color changed to: " . $new_value);

Validate a custom text field setting

This example validates a custom text field setting, ensuring the text does not contain any disallowed characters.

add_action('customize_save_custom_text', 'validate_custom_text', 10, 1);

function validate_custom_text($wp_customize_setting) {
  $new_value = $wp_customize_setting->post_value();
  if (preg_match('/[\'^£$%&*()}{@#~?><>,|=+¬-]/', $new_value)) {
    $wp_customize_setting->manager->add_setting_error(new WP_Error('invalid_text', 'Invalid characters in custom text.'));

Send an email when a specific setting is changed

This example sends an email to the admin when a specific setting is changed.

add_action('customize_save_custom_setting', 'email_on_custom_setting_change', 10, 1);

function email_on_custom_setting_change($wp_customize_setting) {
  $new_value = $wp_customize_setting->post_value();
  $old_value = $wp_customize_setting->value();
  if ($new_value !== $old_value) {
    wp_mail(get_option('admin_email'), 'Custom setting changed', 'The custom setting has been changed.');

Update a cache when the site title is changed

This example updates a cache when the site title is changed.

add_action('customize_save_blogname', 'update_site_title_cache', 10, 1);

function update_site_title_cache($wp_customize_setting) {
  $new_value = $wp_customize_setting->post_value();
  wp_cache_set('site_title', $new_value);

This example appends a prefix to a custom footer text setting before saving.

add_action('customize_save_footer_text', 'prefix_footer_text', 10, 1);

function prefix_footer_text($wp_customize_setting) {
  $new_value = $wp_customize_setting->post_value();
  $prefixed_value = 'My Site - ' . $new_value;