WordPress.org

Make WordPress Core

Changeset 39318


Ignore:
Timestamp:
11/19/2016 05:59:12 AM (18 months ago)
Author:
westonruter
Message:

Customize: Ensure WP_Customize_Setting::value() returns previewed value for custom types utilizing the customize_value_{$id_base} filter.

Fixes #38864.

Location:
trunk
Files:
3 edited

Legend:

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

    r38470 r39318  
    697697
    698698        if ( ! $is_core_type && ! $this->is_multidimensional_aggregated ) {
     699
     700            // Use post value if previewed and a post value is present.
     701            if ( $this->is_previewed ) {
     702                $value = $this->post_value( null );
     703                if ( null !== $value ) {
     704                    return $value;
     705                }
     706            }
     707
    699708            $value = $this->get_root_value( $this->default );
    700709
  • trunk/src/wp-includes/customize/class-wp-customize-custom-css-setting.php

    r39209 r39318  
    133133     */
    134134    public function value() {
     135        if ( $this->is_previewed ) {
     136            $post_value = $this->post_value( null );
     137            if ( null !== $post_value ) {
     138                return $post_value;
     139            }
     140        }
    135141        $id_base = $this->id_data['base'];
    136         if ( $this->is_previewed && null !== $this->post_value( null ) ) {
    137             return $this->post_value();
    138         }
    139142        $value = '';
    140143        $post = wp_get_custom_css_post( $this->stylesheet );
  • trunk/tests/phpunit/tests/customize/setting.php

    r38810 r39318  
    396396        $this->assertEquals( $post_data_overrides[ $name ], $setting->value() );
    397397
     398        // Custom type that does not handle supplying the post value from the customize_value_{$id_base} filter.
     399        $setting_id = 'custom_without_previewing_value_filter';
     400        $setting = $this->manager->add_setting( $setting_id, array(
     401            'type' => 'custom_preview_test',
     402            'default' => 123,
     403            'sanitize_callback' => array( $this->manager->nav_menus, 'intval_base10' ),
     404        ) );
     405        $this->assertSame( 123, $setting->value() );
     406        $this->manager->set_post_value( $setting_id, '456' );
     407        $setting->preview();
     408        $this->assertSame( 456, $setting->value() );
     409
    398410        unset( $this->custom_type_data_previewed, $this->custom_type_data_saved );
    399411    }
Note: See TracChangeset for help on using the changeset viewer.