diff --git a/.travis.yml b/.travis.yml index 6741eb006b..4ecde6b6fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,6 @@ matrix: - php: nightly allow_failures: - php: nightly - - php: 7.3 before_install: - | if [[ "$WP_TRAVISCI" == "travis:phpunit" ]]; then diff --git a/src/wp-includes/nav-menu.php b/src/wp-includes/nav-menu.php index 6a290bdaa9..74214c6636 100644 --- a/src/wp-includes/nav-menu.php +++ b/src/wp-includes/nav-menu.php @@ -1139,7 +1139,9 @@ function wp_map_nav_menu_locations( $new_nav_menu_locations, $old_nav_menu_locat foreach ( $registered_nav_menus as $new_location => $name ) { // ...actually match! - if ( false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) { + if ( is_string( $new_location ) && false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) { + continue; + } elseif ( is_numeric( $new_location ) && $new_location !== $slug ) { continue; } @@ -1150,7 +1152,9 @@ function wp_map_nav_menu_locations( $new_nav_menu_locations, $old_nav_menu_locat foreach ( $slug_group as $slug ) { // ... have a match as well. - if ( false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) { + if ( is_string( $location ) && false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) { + continue; + } elseif ( is_numeric( $location ) && $location !== $slug ) { continue; } diff --git a/tests/phpunit/tests/menu/nav-menu.php b/tests/phpunit/tests/menu/nav-menu.php index b0da967b8b..d8fbd6b92f 100644 --- a/tests/phpunit/tests/menu/nav-menu.php +++ b/tests/phpunit/tests/menu/nav-menu.php @@ -200,4 +200,29 @@ class Tests_Nav_Menu_Theme_Change extends WP_UnitTestCase { ); $this->assertEqualSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations ); } + + /** + * Technically possible old nav menu locations were registered numerically. + * + * @covers wp_map_nav_menu_locations() + */ + public function test_numerical_old_locations() { + $this->register_nav_menu_locations( array( 'primary', 1 ) ); + + $old_nav_menu_locations = array( + 'primary' => 1, + 'tertiary' => 2, + 0 => 3, + ); + + $next_theme_nav_menu_locations = array(); + $new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $next_theme_nav_menu_locations, $old_nav_menu_locations ); + + $expected_nav_menu_locations = array( + 'primary' => 1, + 0 => 3, + ); + + $this->assertEqualSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations ); + } }