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.
Amends [35007].
See #32103.
Fixes #36952.


git-svn-id: https://develop.svn.wordpress.org/trunk@40036 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter 2017-02-01 01:39:39 +00:00
parent 43aed27058
commit 7d8b03458c
2 changed files with 11 additions and 2 deletions

View File

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

View File

@ -402,12 +402,21 @@ class Tests_WP_Customize_Setting extends WP_UnitTestCase {
'default' => 123, 'default' => 123,
'sanitize_callback' => array( $this->manager->nav_menus, 'intval_base10' ), '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->assertSame( 123, $setting->value() );
$this->manager->set_post_value( $setting_id, '456' ); $this->manager->set_post_value( $setting_id, '456' );
$setting->preview(); $setting->preview();
$this->assertSame( 456, $setting->value() ); $this->assertSame( 456, $setting->value() );
unset( $this->custom_type_data_previewed, $this->custom_type_data_saved ); unset( $this->custom_type_data_previewed, $this->custom_type_data_saved );
remove_theme_mod( $setting_id );
} }
/** /**