Customize: Ensure root values are accessible in multidimensional custom setting types.

Fixes bad conditions in `WP_Customize_Setting::get_root_value()` and `WP_Customize_Setting::set_root_value()`.

Props dlh, westonruter.
Amends [35007].
Merges [40036] to the 4.7 branch.
See #32103.
Fixes #36952.


git-svn-id: https://develop.svn.wordpress.org/branches/4.7@40088 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Dion Hulse 2017-02-20 06:49:11 +00:00
parent 5a0a298082
commit 1109726f83
2 changed files with 11 additions and 2 deletions

View File

@ -585,7 +585,7 @@ class WP_Customize_Setting {
$id_base = $this->id_data['base'];
if ( 'option' === $this->type ) {
return get_option( $id_base, $default );
} else if ( 'theme_mod' ) {
} elseif ( 'theme_mod' === $this->type ) {
return get_theme_mod( $id_base, $default );
} else {
/*
@ -614,7 +614,7 @@ class WP_Customize_Setting {
$autoload = self::$aggregated_multidimensionals[ $this->type ][ $this->id_data['base'] ]['autoload'];
}
return update_option( $id_base, $value, $autoload );
} else if ( 'theme_mod' ) {
} elseif ( 'theme_mod' === $this->type ) {
set_theme_mod( $id_base, $value );
return true;
} else {

View File

@ -402,12 +402,21 @@ class Tests_WP_Customize_Setting extends WP_UnitTestCase {
'default' => 123,
'sanitize_callback' => array( $this->manager->nav_menus, 'intval_base10' ),
) );
/*
* In #36952 the conditions were such that get_theme_mod() be erroneously used
* to source the root value for a custom multidimensional type.
* Add a theme mod with the same name as the custom setting to test fix.
*/
set_theme_mod( $setting_id, 999 );
$this->assertSame( 123, $setting->value() );
$this->manager->set_post_value( $setting_id, '456' );
$setting->preview();
$this->assertSame( 456, $setting->value() );
unset( $this->custom_type_data_previewed, $this->custom_type_data_saved );
remove_theme_mod( $setting_id );
}
/**