Make WordPress Core


Ignore:
Timestamp:
11/21/2015 02:51:57 AM (9 years ago)
Author:
westonruter
Message:

Customize: Ensure that a setting (especially a multidimensional one) can still be previewed when the post value to preview is set after preview() is invoked.

  • Introduce customize_post_value_set_{$setting_id} and customize_post_value_set actions which are done when WP_Customize_Manager::set_post_value() is called.
  • Clear the preview_applied flag for aggregated multidimensional settings when a post value is set. This ensures the new value is used instead of a previously-cached previewed value.
  • Move $is_preview property from subclasses to WP_Customize_Setting parent class.
  • Deferred preview: Ensure that when preview() short-circuits due to not being applicable that it will be called again later when the post value is set.
  • Populate post value for updated-widget with the (unsanitized) JS-value in WP_Customize_Widgets::call_widget_update() so that value will be properly sanitized when accessed in WP_Customize_Manager::post_value().

Includes unit tests with assertions to check the reported issues and validate the fixes.

Fixes defect introduced in [35007].
See #32103.
Fixes #34738.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-customize-manager.php

    r35718 r35724  
    660660        $this->unsanitized_post_values();
    661661        $this->_post_values[ $setting_id ] = $value;
     662
     663        /**
     664         * Announce when a specific setting's unsanitized post value has been set.
     665         *
     666         * Fires when the {@see WP_Customize_Manager::set_post_value()} method is called.
     667         *
     668         * The dynamic portion of the hook name, `$setting_id`, refers to the setting ID.
     669         *
     670         * @since 4.4.0
     671         *
     672         * @param mixed                $value Unsanitized setting post value.
     673         * @param WP_Customize_Manager $this  WP_Customize_Manager instance.
     674         */
     675        do_action( "customize_post_value_set_{$setting_id}", $value, $this );
     676
     677        /**
     678         * Announce when any setting's unsanitized post value has been set.
     679         *
     680         * Fires when the {@see WP_Customize_Manager::set_post_value()} method is called.
     681         *
     682         * This is useful for <code>WP_Customize_Setting</code> instances to watch
     683         * in order to update a cached previewed value.
     684         *
     685         * @since 4.4.0
     686         *
     687         * @param string               $setting_id Setting ID.
     688         * @param mixed                $value      Unsanitized setting post value.
     689         * @param WP_Customize_Manager $this       WP_Customize_Manager instance.
     690         */
     691        do_action( 'customize_post_value_set', $setting_id, $value, $this );
    662692    }
    663693
Note: See TracChangeset for help on using the changeset viewer.