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:
parent
43aed27058
commit
7d8b03458c
|
@ -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 {
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue