From 7bff33a6eb91478945202f4aae31452c47ab1e7d Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Sat, 12 Aug 2017 21:20:23 +0000 Subject: [PATCH] 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 --- .../class-wp-customize-manager.php | 2 +- tests/phpunit/tests/customize/manager.php | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php index 9ba93c575c..3c9de49f9e 100644 --- a/src/wp-includes/class-wp-customize-manager.php +++ b/src/wp-includes/class-wp-customize-manager.php @@ -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. } } diff --git a/tests/phpunit/tests/customize/manager.php b/tests/phpunit/tests/customize/manager.php index 2aaafb6278..b38ddbd1f3 100644 --- a/tests/phpunit/tests/customize/manager.php +++ b/tests/phpunit/tests/customize/manager.php @@ -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. *