Customize: Fix PHP warning raised when deleting a setting from changeset via passing `null` as params in `WP_Customize_Manager::save_changeset_post()`.

Props dlh.
Fixes #41621.


git-svn-id: https://develop.svn.wordpress.org/trunk@41243 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter 2017-08-12 21:20:23 +00:00
parent 440c8692e3
commit 7bff33a6eb
2 changed files with 33 additions and 1 deletions

View File

@ -2278,7 +2278,7 @@ final class WP_Customize_Manager {
// Amend post values with any supplied data.
foreach ( $args['data'] as $setting_id => $setting_params ) {
if ( array_key_exists( 'value', $setting_params ) ) {
if ( is_array( $setting_params ) && array_key_exists( 'value', $setting_params ) ) {
$this->set_post_value( $setting_id, $setting_params['value'] ); // Add to post values so that they can be validated and sanitized.
}
}

View File

@ -1245,6 +1245,38 @@ class Tests_WP_Customize_Manager extends WP_UnitTestCase {
$this->assertEquals( $other_admin_user_id, $data['scratchpad']['user_id'] );
}
/**
* Test passing `null` for a setting ID to remove it from the changeset.
*
* @ticket 41621
* @covers WP_Customize_Manager::save_changeset_post()
*/
function test_remove_setting_from_changeset_post() {
$uuid = wp_generate_uuid4();
$manager = $this->create_test_manager( $uuid );
$manager->save_changeset_post( array(
'data' => array(
'scratchpad' => array(
'value' => 'foo',
),
),
) );
// Create a new manager so post values are unset.
$manager = $this->create_test_manager( $uuid );
$this->assertArrayHasKey( 'scratchpad', $manager->changeset_data() );
$manager->save_changeset_post( array(
'data' => array(
'scratchpad' => null,
),
) );
$this->assertArrayNotHasKey( 'scratchpad', $manager->changeset_data() );
}
/**
* Test writing changesets and publishing with users who can unfiltered_html and those who cannot.
*