Make WordPress Core

Changeset 59179


Ignore:
Timestamp:
10/05/2024 10:29:16 PM (5 weeks ago)
Author:
joedolson
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-walker-nav-menu.php

    r59178 r59179  
    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()
     
    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        // 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
    215234        $atts           = array();
    216         $atts['title']  = ! empty( $menu_item->attr_title ) ? $menu_item->attr_title : '';
    217235        $atts['target'] = ! empty( $menu_item->target ) ? $menu_item->target : '';
    218236        $atts['rel']    = ! empty( $menu_item->xfn ) ? $menu_item->xfn : '';
     
    229247
    230248        $atts['aria-current'] = $menu_item->current ? 'page' : '';
     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        }
    231260
    232261        /**
     
    252281        $attributes = $this->build_atts( $atts );
    253282
    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 
    269283        $item_output  = $args->before;
    270284        $item_output .= '<a' . $attributes . '>';
Note: See TracChangeset for help on using the changeset viewer.