mirror of
git://develop.git.wordpress.org/
synced 2025-01-17 12:58:25 +01:00
Nav Menus: Fix a PHP 7.3 error when switching themes.
When switching themes, `wp_map_nav_menu_locations()` is used to ensure nav menus are placed in the relevant menu location. Occasionally, menus are registered to locations with numeric slugs, rather than strings. `wp_map_nav_menu_locations()` assumed it would be the latter, and ran `stripos()` on those numeric slugs. This behaviour is deprecated in PHP 7.3. As this is the last known PHP 7.3 incompatibility, this commit also removes PHP 7.3 from Travis' `allowed_failures` list. Props desrosj, jorbin. See #45018. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43899 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
07736dc37c
commit
61ee6d9fa7
@ -31,7 +31,6 @@ matrix:
|
|||||||
- php: nightly
|
- php: nightly
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- php: nightly
|
- php: nightly
|
||||||
- php: 7.3
|
|
||||||
before_install:
|
before_install:
|
||||||
- |
|
- |
|
||||||
if [[ "$WP_TRAVISCI" == "travis:phpunit" ]]; then
|
if [[ "$WP_TRAVISCI" == "travis:phpunit" ]]; then
|
||||||
|
@ -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 ) {
|
foreach ( $registered_nav_menus as $new_location => $name ) {
|
||||||
|
|
||||||
// ...actually match!
|
// ...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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1150,7 +1152,9 @@ function wp_map_nav_menu_locations( $new_nav_menu_locations, $old_nav_menu_locat
|
|||||||
foreach ( $slug_group as $slug ) {
|
foreach ( $slug_group as $slug ) {
|
||||||
|
|
||||||
// ... have a match as well.
|
// ... 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 );
|
$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 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user