Make WordPress Core

Changeset 61745


Ignore:
Timestamp:
02/26/2026 02:34:53 AM (7 months ago)
Author:
joedolson
Message:

Users: A11y: Improve title attributes in author link functions.

Remove the title attribute from the_author_posts_link() and related functions, retaining text for use in the_author_posts_link filter, and add parameter to disable title attributes in the_author_link().

Default behavior will still differentiate the two links, but adds the option to remove all title attributes.

Props sabernhardt, alh0319, adnanlimdi, audrasjb, joedolson.
Fixes #62835. See #26559.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/author-template.php

    r61454 r61745  
    230230 *
    231231 * @since 3.0.0
     232 * @since 7.0.0 Added `$use_title_attr` parameter.
    232233 *
    233234 * @global WP_User $authordata The current author's data.
    234235 *
     236 * @param bool $use_title_attr Optional. Whether to add a title attribute.
     237 *                             Default true.
    235238 * @return string An HTML link if the author's URL exists in user meta,
    236239 *                otherwise the result of get_the_author().
    237240 */
    238 function get_the_author_link() {
     241function get_the_author_link( $use_title_attr = true ) {
    239242        if ( get_the_author_meta( 'url' ) ) {
    240243                global $authordata;
    … …  
    243246                $author_display_name = get_the_author();
    244247
     248                /* translators: %s: Author's display name. */
     249                $author_title = sprintf( __( 'Visit %s’s website' ), $author_display_name );
     250
    245251                $link = sprintf(
    246                         '<a href="%1$s" title="%2$s" rel="author external">%3$s</a>',
     252                        '<a href="%1$s"%2$s rel="author external">%3$s</a>',
    247253                        esc_url( $author_url ),
    248                         /* translators: %s: Author's display name. */
    249                         esc_attr( sprintf( __( 'Visit %s&#8217;s website' ), $author_display_name ) ),
     254                        $use_title_attr ? ' title="' . esc_attr( $author_title ) . '"' : '',
    250255                        $author_display_name
    251256                );
    … …  
    275280 *
    276281 * @since 2.1.0
    277  */
    278 function the_author_link() {
    279         echo get_the_author_link();
     282 * @since 7.0.0 Added `$use_title_attr` parameter.
     283 *
     284 * @param bool $use_title_attr Optional. Whether to add a title attribute.
     285 *                             Default true.
     286 */
     287function the_author_link( $use_title_attr = true ) {
     288        echo get_the_author_link( $use_title_attr );
    280289}
    281290
    … …  
    311320 *
    312321 * @since 4.4.0
     322 * @since 7.0.0 Removed title attribute.
    313323 *
    314324 * @global WP_User $authordata The current author's data.
    … …  
    323333        }
    324334
     335        $author = get_the_author();
     336        /* translators: %s: Author's display name. */
     337        $title  = sprintf( __( 'Posts by %s' ), $author );
     338
    325339        $link = sprintf(
    326                 '<a href="%1$s" title="%2$s" rel="author">%3$s</a>',
     340                '<a href="%1$s" rel="author">%2$s</a>',
    327341                esc_url( get_author_posts_url( $authordata->ID, $authordata->user_nicename ) ),
    328                 /* translators: %s: Author's display name. */
    329                 esc_attr( sprintf( __( 'Posts by %s' ), get_the_author() ) ),
    330                 get_the_author()
     342                $author
    331343        );
    332344
    … …  
    335347         *
    336348         * @since 2.9.0
    337          *
    338          * @param string $link HTML link.
    339          */
    340         return apply_filters( 'the_author_posts_link', $link );
     349         * @since 7.0.0 Added `$author` and `$title` parameters.
     350         *
     351         * @param string $link   HTML link.
     352         * @param string $author Author's display name.
     353         * @param string $title  Text originally used for a title attribute.
     354         */
     355        return apply_filters( 'the_author_posts_link', $link, $author, $title );
    341356}
    342357
    … …  
    537552
    538553                $link = sprintf(
    539                         '<a href="%1$s" title="%2$s">%3$s</a>',
     554                        '<a href="%1$s">%2$s</a>',
    540555                        esc_url( get_author_posts_url( $author->ID, $author->user_nicename ) ),
    541                         /* translators: %s: Author's display name. */
    542                         esc_attr( sprintf( __( 'Posts by %s' ), $author->display_name ) ),
    543556                        $name
    544557                );
  • trunk/tests/phpunit/tests/user/getTheAuthorPostsLink.php

    r55755 r61745  
    5252
    5353                $this->assertStringContainsString( $url, $link );
    54                 $this->assertStringContainsString( 'Posts by Test Author', $link );
    5554                $this->assertStringContainsString( '>Test Author</a>', $link );
    5655
    … …  
    7574
    7675                $this->assertStringContainsString( $url, $link );
    77                 $this->assertStringContainsString( 'Posts by Test Author', $link );
    7876                $this->assertStringContainsString( '>Test Author</a>', $link );
    7977
  • trunk/tests/phpunit/tests/user/wpListAuthors.php

    r58097 r61745  
    8888        public function test_wp_list_authors_default() {
    8989                $expected['default'] =
    90                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    91                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
    92                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
     90                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     91                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>' .
     92                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>';
    9393
    9494                $this->assertSame( $expected['default'], wp_list_authors( array( 'echo' => false ) ) );
    … …  
    9797        public function test_wp_list_authors_orderby() {
    9898                $expected['post_count'] =
    99                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>' .
    100                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    101                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>';
     99                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>' .
     100                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     101                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>';
    102102
    103103                $this->assertSame(
    … …  
    114114        public function test_wp_list_authors_order() {
    115115                $expected['id'] =
    116                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
    117                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    118                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
     116                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>' .
     117                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     118                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>';
    119119
    120120                $this->assertSame(
    … …  
    132132        public function test_wp_list_authors_optioncount() {
    133133                $expected['optioncount'] =
    134                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a> (2)</li>' .
    135                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a> (3)</li>' .
    136                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a> (1)</li>';
     134                        '<li><a href="' . self::$user_urls[1] . '">bob</a> (2)</li>' .
     135                        '<li><a href="' . self::$user_urls[2] . '">paul</a> (3)</li>' .
     136                        '<li><a href="' . self::$user_urls[0] . '">zack</a> (1)</li>';
    137137
    138138                $this->assertSame(
    … …  
    181181
    182182                $expected['exclude_admin'] =
    183                         '<li><a href="' . get_author_posts_url( 1 ) . '" title="Posts by admin">admin</a></li>' .
    184                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    185                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
    186                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
     183                        '<li><a href="' . get_author_posts_url( 1 ) . '">admin</a></li>' .
     184                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     185                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>' .
     186                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>';
    187187
    188188                $this->assertSame(
    … …  
    199199        public function test_wp_list_authors_show_fullname() {
    200200                $expected['show_fullname'] =
    201                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob reno</a></li>' .
    202                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul norris</a></li>' .
    203                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack moon</a></li>';
     201                        '<li><a href="' . self::$user_urls[1] . '">bob reno</a></li>' .
     202                        '<li><a href="' . self::$user_urls[2] . '">paul norris</a></li>' .
     203                        '<li><a href="' . self::$user_urls[0] . '">zack moon</a></li>';
    204204
    205205                $this->assertSame(
    … …  
    218218
    219219                $expected['hide_empty'] =
    220                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    221                         '<li><a href="' . get_author_posts_url( $fred_id ) . '" title="Posts by fred">fred</a></li>' .
    222                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
    223                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
     220                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     221                        '<li><a href="' . get_author_posts_url( $fred_id ) . '">fred</a></li>' .
     222                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>' .
     223                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>';
    224224
    225225                $this->assertSame(
    … …  
    236236        public function test_wp_list_authors_echo() {
    237237                $expected['echo'] =
    238                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
    239                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
    240                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
     238                        '<li><a href="' . self::$user_urls[1] . '">bob</a></li>' .
     239                        '<li><a href="' . self::$user_urls[2] . '">paul</a></li>' .
     240                        '<li><a href="' . self::$user_urls[0] . '">zack</a></li>';
    241241
    242242                $this->expectOutputString( $expected['echo'] );
    … …  
    250250
    251251                $expected['feed'] =
    252                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a> (<a href="' . $url1 . '">link to feed</a>)</li>' .
    253                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a> (<a href="' . $url2 . '">link to feed</a>)</li>' .
    254                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a> (<a href="' . $url0 . '">link to feed</a>)</li>';
     252                        '<li><a href="' . self::$user_urls[1] . '">bob</a> (<a href="' . $url1 . '">link to feed</a>)</li>' .
     253                        '<li><a href="' . self::$user_urls[2] . '">paul</a> (<a href="' . $url2 . '">link to feed</a>)</li>' .
     254                        '<li><a href="' . self::$user_urls[0] . '">zack</a> (<a href="' . $url0 . '">link to feed</a>)</li>';
    255255
    256256                $this->assertSame(
    … …  
    271271
    272272                $expected['feed_image'] =
    273                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a> <a href="' . $url1 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>' .
    274                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a> <a href="' . $url2 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>' .
    275                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a> <a href="' . $url0 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>';
     273                        '<li><a href="' . self::$user_urls[1] . '">bob</a> <a href="' . $url1 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>' .
     274                        '<li><a href="' . self::$user_urls[2] . '">paul</a> <a href="' . $url2 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>' .
     275                        '<li><a href="' . self::$user_urls[0] . '">zack</a> <a href="' . $url0 . '"><img src="http://' . WP_TESTS_DOMAIN . '/path/to/a/graphic.png" style="border: none;" /></a></li>';
    276276
    277277                $this->assertSame(
    … …  
    295295
    296296                $expected['feed_type'] =
    297                         '<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a> (<a href="' . $url1 . '">link to feed</a>)</li>' .
    298                         '<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a> (<a href="' . $url2 . '">link to feed</a>)</li>' .
    299                         '<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a> (<a href="' . $url0 . '">link to feed</a>)</li>';
     297                        '<li><a href="' . self::$user_urls[1] . '">bob</a> (<a href="' . $url1 . '">link to feed</a>)</li>' .
     298                        '<li><a href="' . self::$user_urls[2] . '">paul</a> (<a href="' . $url2 . '">link to feed</a>)</li>' .
     299                        '<li><a href="' . self::$user_urls[0] . '">zack</a> (<a href="' . $url0 . '">link to feed</a>)</li>';
    300300
    301301                $this->assertSame(
    … …  
    313313        public function test_wp_list_authors_style() {
    314314                $expected['style'] =
    315                         '<a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a>, ' .
    316                         '<a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a>, ' .
    317                         '<a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a>';
     315                        '<a href="' . self::$user_urls[1] . '">bob</a>, ' .
     316                        '<a href="' . self::$user_urls[2] . '">paul</a>, ' .
     317                        '<a href="' . self::$user_urls[0] . '">zack</a>';
    318318
    319319                $this->assertSame(
Note: See TracChangeset for help on using the changeset viewer.