Ankerlink an den Anfang der Seite
hiker 918473 1920
Bildquelle: Pixabay, dreamypixel

Der Beitrag, geschriebem am 14. August 2017, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Mit WordPress 4.1 kamen die Funktionen get_the_posts_pagination() und the_posts_pagination(). Validiert man eine Seite die ein Theme mit dieser Funktion verwendet, wird Warning: The navigation role is unnecessary for element nav angezeigt.

validator warning

Wem das nicht gefällt, hier kommt die Lösung.

get_the_posts_pagination() verwendet paginate_links() und die von außen nicht zugängliche Funktion _navigation_markup für das Template.

Die Funktion ist in wp-includes/link-template.php

function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) {
    if ( empty( $screen_reader_text ) ) {
        $screen_reader_text = __( 'Posts navigation' );
    }
 
    $template = '
    <nav class="navigation %1$s" role="navigation">
        <h2 class="screen-reader-text">%2$s</h2>
        <div class="nav-links">%3$s</div>
    </nav>';
 
    /**
     * Filters the navigation markup template.
     *
     * Note: The filtered template HTML must contain specifiers for the navigation
     * class (%1$s), the screen-reader-text value (%2$s), and placement of the
     * navigation links (%3$s):
     *
     *     <nav class="navigation %1$s" role="navigation">
     *         <h2 class="screen-reader-text">%2$s</h2>
     *         <div class="nav-links">%3$s</div>
     *     </nav>
     *
     * @since 4.4.0
     *
     * @param string $template The default template.
     * @param string $class    The class passed by the calling function.
     * @return string Navigation template.
     */
    $template = apply_filters( 'navigation_markup_template', $template, $class );
 
    return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links );
}

Das Template ist jedoch über einen Filter modifizierbar:

 $template = apply_filters( 'navigation_markup_template', $template, $class );

.

Das role-Attribut aus dem Template entfernen

function flxo_validate_pagination( $template ) {
    return str_replace( 'role="navigation"', '', $template );
}
add_filter( 'navigation_markup_template', 'flxo_validate_pagination' );

Der Filter wirkt auch auf die Paginierung von Kommentaren, da sie dasselbe Template verwendet.

validator clean

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.