diff --git a/src/wp-includes/nav-menu.php b/src/wp-includes/nav-menu.php index 9b6eeba9b3..863183a92b 100644 --- a/src/wp-includes/nav-menu.php +++ b/src/wp-includes/nav-menu.php @@ -456,11 +456,15 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item $original_parent = 0 < $menu_item_db_id ? get_post_field( 'post_parent', $menu_item_db_id ) : 0; - if ( 'custom' != $args['menu-item-type'] ) { - /* if non-custom menu item, then: - * use original object's URL - * blank default title to sync with original object's - */ + if ( 'custom' === $args['menu-item-type'] ) { + // If custom menu item, trim the URL. + $args[ 'menu-item-url' ] = trim( $args[ 'menu-item-url' ] ); + } else { + /* + * If non-custom menu item, then: + * - use the original object's URL. + * - blank default title to sync with the original object's title. + */ $args['menu-item-url'] = ''; diff --git a/tests/phpunit/tests/post/nav-menu.php b/tests/phpunit/tests/post/nav-menu.php index 711a52d982..0f12e54ece 100644 --- a/tests/phpunit/tests/post/nav-menu.php +++ b/tests/phpunit/tests/post/nav-menu.php @@ -149,7 +149,7 @@ class Test_Nav_Menus extends WP_UnitTestCase { array( 'menu-item-type' => 'custom', 'menu-item-title' => 'Wordpress.org', - 'menu-item-link' => 'http://wordpress.org', + 'menu-item-url' => 'http://wordpress.org', 'menu-item-status' => 'publish', ) ); @@ -926,4 +926,34 @@ class Test_Nav_Menus extends WP_UnitTestCase { $this->assertContains( 'menu-item-privacy-policy', $classes ); } + /** + * @ticket 47723 + * @dataProvider data_trim_url_for_custom_item + */ + function test_trim_url_for_custom_item( $custom_url, $correct_url ) { + $custom_item_id = wp_update_nav_menu_item( + $this->menu_id, + 0, + array( + 'menu-item-type' => 'custom', + 'menu-item-title' => 'WordPress.org', + 'menu-item-url' => $custom_url, + 'menu-item-status' => 'publish', + ) + ); + + $custom_item = wp_setup_nav_menu_item( get_post( $custom_item_id ) ); + $this->assertEquals( $correct_url, $custom_item->url ); + } + + /** + * Provides data for test_trim_url_for_custom_item(). + */ + function data_trim_url_for_custom_item() { + return array( + array( 'https://wordpress.org ', 'https://wordpress.org' ), + array( ' https://wordpress.org', 'https://wordpress.org' ), + ); + } + }