diff -r 3d4e9c994f10 -r a86126ab1dd4 wp/wp-includes/widgets/class-wp-nav-menu-widget.php --- a/wp/wp-includes/widgets/class-wp-nav-menu-widget.php Tue Oct 22 16:11:46 2019 +0200 +++ b/wp/wp-includes/widgets/class-wp-nav-menu-widget.php Tue Dec 15 13:49:49 2020 +0100 @@ -39,14 +39,15 @@ * @param array $instance Settings for the current Navigation Menu widget instance. */ public function widget( $args, $instance ) { - // Get menu + // Get menu. $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; if ( ! $nav_menu ) { return; } - $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; + $default_title = __( 'Menu' ); + $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); @@ -57,10 +58,36 @@ echo $args['before_title'] . $title . $args['after_title']; } - $nav_menu_args = array( - 'fallback_cb' => '', - 'menu' => $nav_menu, - ); + $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml'; + + /** + * Filters the HTML format of widgets with navigation links. + * + * @since 5.5.0 + * + * @param string $format The type of markup to use in widgets with navigation links. + * Accepts 'html5', 'xhtml'. + */ + $format = apply_filters( 'navigation_widgets_format', $format ); + + if ( 'html5' === $format ) { + // The title may be filtered: Strip out HTML and make sure the aria-label is never empty. + $title = trim( strip_tags( $title ) ); + $aria_label = $title ? $title : $default_title; + + $nav_menu_args = array( + 'fallback_cb' => '', + 'menu' => $nav_menu, + 'container' => 'nav', + 'container_aria_label' => $aria_label, + 'items_wrap' => '