Skip to content

Commit 4231110

Browse files
committed
Menus: Remove redundant title attributes.
Omit `title` attributes if they are defined but are the same text as the menu item title, either before or after filtering. If a navigation menu filter makes significant changes to the menu title without changing the title attribute, this will still remove them. The cases where this occurs and the title attribute is still a useful value will be very uncommon, however. Props hareesh-pillai, audrasjb, sabernhardt, afercia, sergeybiryukov, tirth03, joedolson. Fixes #51299. git-svn-id: https://develop.svn.wordpress.org/trunk@59177 602fd350-edb4-49c9-b593-d223f7449a82
1 parent dc6f059 commit 4231110

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

src/wp-includes/class-walker-nav-menu.php

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public function end_lvl( &$output, $depth = 0, $args = null ) {
126126
* @since 4.4.0 The {@see 'nav_menu_item_args'} filter was added.
127127
* @since 5.9.0 Renamed `$item` to `$data_object` and `$id` to `$current_object_id`
128128
* to match parent class for PHP 8 named parameter support.
129+
* @since 6.7.0 Removed redundant title attributes.
129130
*
130131
* @see Walker::start_el()
131132
*
@@ -212,8 +213,22 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
212213

213214
$output .= $indent . '<li' . $li_attributes . '>';
214215

216+
/** This filter is documented in wp-includes/post-template.php */
217+
$title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID );
218+
219+
/**
220+
* Filters a menu item's title.
221+
*
222+
* @since 4.4.0
223+
*
224+
* @param string $title The menu item's title.
225+
* @param WP_Post $menu_item The current menu item object.
226+
* @param stdClass $args An object of wp_nav_menu() arguments.
227+
* @param int $depth Depth of menu item. Used for padding.
228+
*/
229+
$title = apply_filters( 'nav_menu_item_title', $title, $menu_item, $args, $depth );
230+
215231
$atts = array();
216-
$atts['title'] = ! empty( $menu_item->attr_title ) ? $menu_item->attr_title : '';
217232
$atts['target'] = ! empty( $menu_item->target ) ? $menu_item->target : '';
218233
$atts['rel'] = ! empty( $menu_item->xfn ) ? $menu_item->xfn : '';
219234

@@ -229,6 +244,14 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
229244

230245
$atts['aria-current'] = $menu_item->current ? 'page' : '';
231246

247+
if ( ! empty( $menu_item->attr_title )
248+
&& trim( strtolower( $menu_item->attr_title ) ) !== trim( strtolower( $title ) )
249+
) {
250+
$atts['title'] = $menu_item->attr_title;
251+
} else {
252+
$atts['title'] = '';
253+
}
254+
232255
/**
233256
* Filters the HTML attributes applied to a menu item's anchor element.
234257
*
@@ -251,21 +274,6 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
251274
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $menu_item, $args, $depth );
252275
$attributes = $this->build_atts( $atts );
253276

254-
/** This filter is documented in wp-includes/post-template.php */
255-
$title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID );
256-
257-
/**
258-
* Filters a menu item's title.
259-
*
260-
* @since 4.4.0
261-
*
262-
* @param string $title The menu item's title.
263-
* @param WP_Post $menu_item The current menu item object.
264-
* @param stdClass $args An object of wp_nav_menu() arguments.
265-
* @param int $depth Depth of menu item. Used for padding.
266-
*/
267-
$title = apply_filters( 'nav_menu_item_title', $title, $menu_item, $args, $depth );
268-
269277
$item_output = $args->before;
270278
$item_output .= '<a' . $attributes . '>';
271279
$item_output .= $args->link_before . $title . $args->link_after;

0 commit comments

Comments
 (0)