From 22135794a216f1888aba31ae92cd5830275920fe Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 6 Nov 2015 06:57:53 +0000 Subject: [PATCH] Customize: Fix typo in `WP_Customize_Manager::_cmp_priority()` which caused unstable sorting for same-priority constructs in PHP. The issue, however, does not manifest in the UI because the UI is now built via JS and the `wp.customize.utils.prioritySort()` algorithm did not have the same typo. Props bordoni, westonruter. Fixes #34594. git-svn-id: https://develop.svn.wordpress.org/trunk@35553 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-customize-manager.php | 2 +- tests/phpunit/tests/customize/manager.php | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php index f8bab30232..fcc9697fd6 100644 --- a/src/wp-includes/class-wp-customize-manager.php +++ b/src/wp-includes/class-wp-customize-manager.php @@ -1302,7 +1302,7 @@ final class WP_Customize_Manager { */ protected function _cmp_priority( $a, $b ) { if ( $a->priority === $b->priority ) { - return $a->instance_number - $a->instance_number; + return $a->instance_number - $b->instance_number; } else { return $a->priority - $b->priority; } diff --git a/tests/phpunit/tests/customize/manager.php b/tests/phpunit/tests/customize/manager.php index 8e6fe2a2a1..247f7651b2 100644 --- a/tests/phpunit/tests/customize/manager.php +++ b/tests/phpunit/tests/customize/manager.php @@ -397,4 +397,38 @@ class Tests_WP_Customize_Manager extends WP_UnitTestCase { $this->assertInstanceOf( 'WP_Customize_Manager', $customize_manager ); return array( 'nav_menus' ); } + + /** + * @ticket 30225 + * @ticket 34594 + */ + function test_prepare_controls_stable_sorting() { + $manager = new WP_Customize_Manager(); + $manager->register_controls(); + $section_id = 'foo-section'; + wp_set_current_user( self::factory()->user->create( array( 'role' => 'administrator' ) ) ); + $manager->add_section( $section_id, array( + 'title' => 'Section', + 'priority' => 1, + ) ); + + $added_control_ids = array(); + $count = 9; + for ( $i = 0; $i < $count; $i += 1 ) { + $id = 'sort-test-' . $i; + $added_control_ids[] = $id; + $manager->add_setting( $id ); + $control = new WP_Customize_Control( $manager, $id, array( + 'section' => $section_id, + 'priority' => 1, + 'setting' => $id, + ) ); + $manager->add_control( $control ); + } + + $manager->prepare_controls(); + + $sorted_control_ids = wp_list_pluck( $manager->get_section( $section_id )->controls, 'id' ); + $this->assertEquals( $added_control_ids, $sorted_control_ids ); + } }