Make WordPress Core

Changeset 44167


Ignore:
Timestamp:
12/14/2018 05:15:54 AM (6 years ago)
Author:
desrosj
Message:

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 behavior is deprecated in PHP 7.3.

As this is the last PHP 7.3 error in unit tests, this commit also removes PHP 7.3 from Travis' allowed_failures list.

Props pento, desrosj, jorbin.

Merges [43899] to trunk.

See #45018.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/.travis.yml

    r43975 r44167  
    1313matrix:
    1414  include:
    15   - php: 7.3
    1615  - php: 7.2
    1716    env: WP_TRAVISCI=travis:format
    1817  - php: 7.1
    1918    env: WP_TRAVISCI=travis:js
     19  - php: 7.3
    2020  - php: 7.2
    2121  - php: 7.1
     
    3535  allow_failures:
    3636  - php: nightly
    37   - php: 7.3
    3837before_install:
    3938- |
  • trunk/src/wp-includes/nav-menu.php

    r43571 r44167  
    11871187
    11881188                // ...actually match!
    1189                 if ( false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) {
     1189                if ( is_string( $new_location ) && false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) {
     1190                    continue;
     1191                } elseif ( is_numeric( $new_location ) && $new_location !== $slug ) {
    11901192                    continue;
    11911193                }
     
    11981200
    11991201                        // ... have a match as well.
    1200                         if ( false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) {
     1202                        if ( is_string( $location ) && false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) {
     1203                            continue;
     1204                        } elseif ( is_numeric( $location ) && $location !== $slug ) {
    12011205                            continue;
    12021206                        }
  • trunk/tests/phpunit/tests/menu/nav-menu.php

    r42636 r44167  
    201201        $this->assertEqualSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
    202202    }
     203
     204    /**
     205     * Technically possible old nav menu locations were registered numerically.
     206     *
     207     * @covers wp_map_nav_menu_locations()
     208     */
     209    public function test_numerical_old_locations() {
     210        $this->register_nav_menu_locations( array( 'primary', 1 ) );
     211
     212        $old_nav_menu_locations = array(
     213            'primary'  => 1,
     214            'tertiary' => 2,
     215            0          => 3,
     216        );
     217
     218        $next_theme_nav_menu_locations     = array();
     219        $new_next_theme_nav_menu_locations = wp_map_nav_menu_locations( $next_theme_nav_menu_locations, $old_nav_menu_locations );
     220
     221        $expected_nav_menu_locations = array(
     222            'primary' => 1,
     223            0         => 3,
     224        );
     225
     226        $this->assertEqualSets( $expected_nav_menu_locations, $new_next_theme_nav_menu_locations );
     227    }
    203228}
Note: See TracChangeset for help on using the changeset viewer.