Make WordPress Core

Changeset 61745

Timestamp:
02/26/2026 02:34:53 AM (7 days 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
    232233 *
    233234 * @global WP_User $authordata The current author's data.
    234235 *
     236
     237
    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() {
    239242    if ( get_the_author_meta( 'url' ) ) {
    240243        global $authordata;
     
    243246        $author_display_name = get_the_author();
    244247
     248
     249
     250
    245251        $link = sprintf(
    246             '<a href="%1$s" title="%2$s" rel="author external">%3$s</a>',
     252            '<a href="%1$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
    313323 *
    314324 * @global WP_User $authordata The current author's data.
     
    323333    }
    324334
     335
     336
     337
     338
    325339    $link = sprintf(
    326         '<a href="%1$s" title="%2$s" rel="author">%3$s</a>',
     340        '<a href="%1$s" $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"$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.