@@ -126,6 +126,7 @@ public function end_lvl( &$output, $depth = 0, $args = null ) {
126
126
* @since 4.4.0 The {@see 'nav_menu_item_args'} filter was added.
127
127
* @since 5.9.0 Renamed `$item` to `$data_object` and `$id` to `$current_object_id`
128
128
* to match parent class for PHP 8 named parameter support.
129
+ * @since 6.7.0 Removed redundant title attributes.
129
130
*
130
131
* @see Walker::start_el()
131
132
*
@@ -212,8 +213,25 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
212
213
213
214
$ output .= $ indent . '<li ' . $ li_attributes . '> ' ;
214
215
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
+ // Save filtered value before filtering again.
220
+ $ the_title_filtered = $ title ;
221
+
222
+ /**
223
+ * Filters a menu item's title.
224
+ *
225
+ * @since 4.4.0
226
+ *
227
+ * @param string $title The menu item's title.
228
+ * @param WP_Post $menu_item The current menu item object.
229
+ * @param stdClass $args An object of wp_nav_menu() arguments.
230
+ * @param int $depth Depth of menu item. Used for padding.
231
+ */
232
+ $ title = apply_filters ( 'nav_menu_item_title ' , $ title , $ menu_item , $ args , $ depth );
233
+
215
234
$ atts = array ();
216
- $ atts ['title ' ] = ! empty ( $ menu_item ->attr_title ) ? $ menu_item ->attr_title : '' ;
217
235
$ atts ['target ' ] = ! empty ( $ menu_item ->target ) ? $ menu_item ->target : '' ;
218
236
$ atts ['rel ' ] = ! empty ( $ menu_item ->xfn ) ? $ menu_item ->xfn : '' ;
219
237
@@ -229,6 +247,17 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
229
247
230
248
$ atts ['aria-current ' ] = $ menu_item ->current ? 'page ' : '' ;
231
249
250
+ // Add title attribute only if it does not match the link text (before or after filtering).
251
+ if ( ! empty ( $ menu_item ->attr_title )
252
+ && trim ( strtolower ( $ menu_item ->attr_title ) ) !== trim ( strtolower ( $ menu_item ->title ) )
253
+ && trim ( strtolower ( $ menu_item ->attr_title ) ) !== trim ( strtolower ( $ the_title_filtered ) )
254
+ && trim ( strtolower ( $ menu_item ->attr_title ) ) !== trim ( strtolower ( $ title ) )
255
+ ) {
256
+ $ atts ['title ' ] = $ menu_item ->attr_title ;
257
+ } else {
258
+ $ atts ['title ' ] = '' ;
259
+ }
260
+
232
261
/**
233
262
* Filters the HTML attributes applied to a menu item's anchor element.
234
263
*
@@ -251,21 +280,6 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur
251
280
$ atts = apply_filters ( 'nav_menu_link_attributes ' , $ atts , $ menu_item , $ args , $ depth );
252
281
$ attributes = $ this ->build_atts ( $ atts );
253
282
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
-
269
283
$ item_output = $ args ->before ;
270
284
$ item_output .= '<a ' . $ attributes . '> ' ;
271
285
$ item_output .= $ args ->link_before . $ title . $ args ->link_after ;
0 commit comments