Customize: Ensure that `WP_Customize_Setting::value()` can return a previewed value for aggregated multidimensionals.

Fixes #37294.


git-svn-id: https://develop.svn.wordpress.org/trunk@37982 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter 2016-07-06 05:58:28 +00:00
parent bddb06dd13
commit ad52e49e4f
2 changed files with 29 additions and 0 deletions

View File

@ -711,6 +711,11 @@ class WP_Customize_Setting {
} elseif ( $this->is_multidimensional_aggregated ) {
$root_value = self::$aggregated_multidimensionals[ $this->type ][ $id_base ]['root_value'];
$value = $this->multidimensional_get( $root_value, $this->id_data['keys'], $this->default );
// Ensure that the post value is used if the setting is previewed, since preview filters aren't applying on cached $root_value.
if ( $this->is_previewed ) {
$value = $this->post_value( $value );
}
} else {
$value = $this->get_root_value( $this->default );
}

View File

@ -640,5 +640,29 @@ class Tests_WP_Customize_Setting extends WP_UnitTestCase {
}
return $validity;
}
/**
* Ensure that WP_Customize_Setting::value() can return a previewed value for aggregated multidimensionals.
*
* @ticket 37294
*/
public function test_multidimensional_value_when_previewed() {
WP_Customize_Setting::reset_aggregated_multidimensionals();
$initial_value = 456;
set_theme_mod( 'nav_menu_locations', array(
'primary' => $initial_value,
) );
$setting_id = 'nav_menu_locations[primary]';
$setting = new WP_Customize_Setting( $this->manager, $setting_id );
$this->assertEquals( $initial_value, $setting->value() );
$override_value = -123456;
$this->manager->set_post_value( $setting_id, $override_value );
$setting->preview();
$this->assertEquals( $override_value, $setting->value() );
}
}