WordPress.org

Make WordPress Core

Ticket #47123: 47123.2.diff

File 47123.2.diff, 11.3 KB (added by afercia, 5 months ago)
  • src/wp-includes/link-template.php

     
    25442544 *
    25452545 * @since 4.1.0
    25462546 * @since 4.4.0 Introduced the `in_same_term`, `excluded_terms`, and `taxonomy` arguments.
     2547 * @since 5.3.0 Added the `aria_label` parameter.
    25472548 *
    25482549 * @param array $args {
    25492550 *     Optional. Default post navigation arguments. Default empty array.
     
    25532554 *     @type bool         $in_same_term       Whether link should be in a same taxonomy term. Default false.
    25542555 *     @type array|string $excluded_terms     Array or comma-separated list of excluded term IDs. Default empty.
    25552556 *     @type string       $taxonomy           Taxonomy, if `$in_same_term` is true. Default 'category'.
    2556  *     @type string       $screen_reader_text Screen reader text for nav element. Default 'Post navigation'.
     2557 *     @type string       $screen_reader_text Screen reader text for the nav element. Default 'Post navigation'.
     2558 *     @type string       $aria_label         ARIA label text for the nav element. Default 'Posts'.
    25572559 * }
    25582560 * @return string Markup for post links.
    25592561 */
    25602562function get_the_post_navigation( $args = array() ) {
     2563        // Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
     2564        if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
     2565                $args['aria_label'] = $args['screen_reader_text'];
     2566        }
     2567
    25612568        $args = wp_parse_args(
    25622569                $args,
    25632570                array(
     
    25672574                        'excluded_terms'     => '',
    25682575                        'taxonomy'           => 'category',
    25692576                        'screen_reader_text' => __( 'Post navigation' ),
     2577                        'aria_label'         => __( 'Posts' ),
    25702578                )
    25712579        );
    25722580
     
    25902598
    25912599        // Only add markup if there's somewhere to navigate to.
    25922600        if ( $previous || $next ) {
    2593                 $navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'] );
     2601                $navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'], $args['aria_label'] );
    25942602        }
    25952603
    25962604        return $navigation;
     
    26122620 * Returns the navigation to next/previous set of posts, when applicable.
    26132621 *
    26142622 * @since 4.1.0
     2623 * @since 5.3.0 Added the `aria_label` parameter.
    26152624 *
    26162625 * @global WP_Query $wp_query WordPress Query object.
    26172626 *
     
    26222631 *                                      Default 'Older posts'.
    26232632 *     @type string $next_text          Anchor text to display in the next posts link.
    26242633 *                                      Default 'Newer posts'.
    2625  *     @type string $screen_reader_text Screen reader text for nav element.
     2634 *     @type string $screen_reader_text Screen reader text for the nav element.
    26262635 *                                      Default 'Posts navigation'.
     2636 *     @type string $aria_label         ARIA label text for the nav element. Default 'Posts'.
    26272637 * }
    26282638 * @return string Markup for posts links.
    26292639 */
     
    26322642
    26332643        // Don't print empty markup if there's only one page.
    26342644        if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
     2645                // Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
     2646                if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
     2647                        $args['aria_label'] = $args['screen_reader_text'];
     2648                }
     2649
    26352650                $args = wp_parse_args(
    26362651                        $args,
    26372652                        array(
     
    26382653                                'prev_text'          => __( 'Older posts' ),
    26392654                                'next_text'          => __( 'Newer posts' ),
    26402655                                'screen_reader_text' => __( 'Posts navigation' ),
     2656                                'aria_label'         => __( 'Posts' ),
    26412657                        )
    26422658                );
    26432659
     
    26522668                        $navigation .= '<div class="nav-next">' . $next_link . '</div>';
    26532669                }
    26542670
    2655                 $navigation = _navigation_markup( $navigation, 'posts-navigation', $args['screen_reader_text'] );
     2671                $navigation = _navigation_markup( $navigation, 'posts-navigation', $args['screen_reader_text'], $args['aria_label'] );
    26562672        }
    26572673
    26582674        return $navigation;
     
    26742690 * Retrieves a paginated navigation to next/previous set of posts, when applicable.
    26752691 *
    26762692 * @since 4.1.0
     2693 * @since 5.3.0 Added the `aria_label` parameter.
    26772694 *
    26782695 * @param array $args {
    26792696 *     Optional. Default pagination arguments, see paginate_links().
     
    26802697 *
    26812698 *     @type string $screen_reader_text Screen reader text for navigation element.
    26822699 *                                      Default 'Posts navigation'.
     2700 *     @type string $aria_label         ARIA label text for the nav element. Default 'Posts'.
    26832701 * }
    26842702 * @return string Markup for pagination links.
    26852703 */
     
    26882706
    26892707        // Don't print empty markup if there's only one page.
    26902708        if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
     2709                // Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
     2710                if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
     2711                        $args['aria_label'] = $args['screen_reader_text'];
     2712                }
     2713
    26912714                $args = wp_parse_args(
    26922715                        $args,
    26932716                        array(
     
    26952718                                'prev_text'          => _x( 'Previous', 'previous set of posts' ),
    26962719                                'next_text'          => _x( 'Next', 'next set of posts' ),
    26972720                                'screen_reader_text' => __( 'Posts navigation' ),
     2721                                'aria_label'         => __( 'Posts' ),
    26982722                        )
    26992723                );
    27002724
     
    27072731                $links = paginate_links( $args );
    27082732
    27092733                if ( $links ) {
    2710                         $navigation = _navigation_markup( $links, 'pagination', $args['screen_reader_text'] );
     2734                        $navigation = _navigation_markup( $links, 'pagination', $args['screen_reader_text'], $args['aria_label'] );
    27112735                }
    27122736        }
    27132737
     
    27302754 * Wraps passed links in navigational markup.
    27312755 *
    27322756 * @since 4.1.0
     2757 * @since 5.3.0 Added the `aria_label` parameter.
    27332758 * @access private
    27342759 *
    27352760 * @param string $links              Navigational links.
    2736  * @param string $class              Optional. Custom class for nav element. Default: 'posts-navigation'.
    2737  * @param string $screen_reader_text Optional. Screen reader text for nav element. Default: 'Posts navigation'.
     2761 * @param string $class              Optional. Custom class for the nav element. Default: 'posts-navigation'.
     2762 * @param string $screen_reader_text Optional. Screen reader text for the nav element. Default: 'Posts navigation'.
     2763 * @param string $aria_label         Optional. ARIA label for the nav element. Default: same value as $screen_reader_text.
    27382764 * @return string Navigation template tag.
    27392765 */
    2740 function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) {
     2766function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '', $aria_label = '' ) {
    27412767        if ( empty( $screen_reader_text ) ) {
    27422768                $screen_reader_text = __( 'Posts navigation' );
    27432769        }
     2770        if ( empty( $aria_label ) ) {
     2771                $aria_label = $screen_reader_text;
     2772        }
    27442773
    27452774        $template = '
    2746         <nav class="navigation %1$s" role="navigation">
     2775        <nav class="navigation %1$s" role="navigation" aria-label="%4$s">
    27472776                <h2 class="screen-reader-text">%2$s</h2>
    27482777                <div class="nav-links">%3$s</div>
    27492778        </nav>';
     
    27522781         * Filters the navigation markup template.
    27532782         *
    27542783         * Note: The filtered template HTML must contain specifiers for the navigation
    2755          * class (%1$s), the screen-reader-text value (%2$s), and placement of the
    2756          * navigation links (%3$s):
     2784         * class (%1$s), the screen-reader-text value (%2$s), placement of the navigation
     2785         * links (%3$s), and ARIA label text if screen-reader-text does not fit that (%4$s):
    27572786         *
    2758          *     <nav class="navigation %1$s" role="navigation">
     2787         *     <nav class="navigation %1$s" role="navigation" aria-label="%4$s">
    27592788         *         <h2 class="screen-reader-text">%2$s</h2>
    27602789         *         <div class="nav-links">%3$s</div>
    27612790         *     </nav>
     
    27682797         */
    27692798        $template = apply_filters( 'navigation_markup_template', $template, $class );
    27702799
    2771         return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links );
     2800        return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links, esc_html( $aria_label ) );
    27722801}
    27732802
    27742803/**
     
    29773006 * Retrieves navigation to next/previous set of comments, when applicable.
    29783007 *
    29793008 * @since 4.4.0
     3009 * @since 5.3.0 Added the `aria_label` parameter.
    29803010 *
    29813011 * @param array $args {
    29823012 *     Optional. Default comments navigation arguments.
     
    29853015 *                                      Default 'Older comments'.
    29863016 *     @type string $next_text          Anchor text to display in the next comments link.
    29873017 *                                      Default 'Newer comments'.
    2988  *     @type string $screen_reader_text Screen reader text for nav element. Default 'Comments navigation'.
     3018 *     @type string $screen_reader_text Screen reader text for the nav element. Default 'Comments navigation'.
     3019 *     @type string $aria_label         ARIA label text for the nav element. Default 'Comments'.
    29893020 * }
    29903021 * @return string Markup for comments links.
    29913022 */
     
    29943025
    29953026        // Are there comments to navigate through?
    29963027        if ( get_comment_pages_count() > 1 ) {
     3028                // Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
     3029                if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
     3030                        $args['aria_label'] = $args['screen_reader_text'];
     3031                }
     3032
    29973033                $args = wp_parse_args(
    29983034                        $args,
    29993035                        array(
     
    30003036                                'prev_text'          => __( 'Older comments' ),
    30013037                                'next_text'          => __( 'Newer comments' ),
    30023038                                'screen_reader_text' => __( 'Comments navigation' ),
     3039                                'aria_label'         => __( 'Comments' ),
    30033040                        )
    30043041                );
    30053042
     
    30143051                        $navigation .= '<div class="nav-next">' . $next_link . '</div>';
    30153052                }
    30163053
    3017                 $navigation = _navigation_markup( $navigation, 'comment-navigation', $args['screen_reader_text'] );
     3054                $navigation = _navigation_markup( $navigation, 'comment-navigation', $args['screen_reader_text'], $args['aria_label'] );
    30183055        }
    30193056
    30203057        return $navigation;
     
    30353072 * Retrieves a paginated navigation to next/previous set of comments, when applicable.
    30363073 *
    30373074 * @since 4.4.0
     3075 * @since 5.3.0 Added the `aria_label` parameter.
    30383076 *
    30393077 * @see paginate_comments_links()
    30403078 *
     
    30413079 * @param array $args {
    30423080 *     Optional. Default pagination arguments.
    30433081 *
    3044  *     @type string $screen_reader_text Screen reader text for nav element. Default 'Comments navigation'.
     3082 *     @type string $screen_reader_text Screen reader text for the nav element. Default 'Comments navigation'.
     3083 *     @type string $aria_label         ARIA label text for the nav element. Default 'Comments'.
    30453084 * }
    30463085 * @return string Markup for pagination links.
    30473086 */
    30483087function get_the_comments_pagination( $args = array() ) {
    3049         $navigation   = '';
     3088        $navigation = '';
     3089
     3090        // Make sure the nav element has an aria-label attribute: fallback to the screen reader text.
     3091        if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
     3092                $args['aria_label'] = $args['screen_reader_text'];
     3093        }
     3094
    30503095        $args         = wp_parse_args(
    30513096                $args,
    30523097                array(
    30533098                        'screen_reader_text' => __( 'Comments navigation' ),
     3099                        'aria_label'         => __( 'Comments' ),
    30543100                )
    30553101        );
    30563102        $args['echo'] = false;
     
    30633109        $links = paginate_comments_links( $args );
    30643110
    30653111        if ( $links ) {
    3066                 $navigation = _navigation_markup( $links, 'comments-pagination', $args['screen_reader_text'] );
     3112                $navigation = _navigation_markup( $links, 'comments-pagination', $args['screen_reader_text'], $args['aria_label'] );
    30673113        }
    30683114
    30693115        return $navigation;