WordPress-Theme: Kopf aufräumen und den W3C Validator glücklich machen

Bei vielen WordPress-Themes liefert der W3C Validator Warnmeldungen. Und zwar betreffend zweier Dinge im Kopfteil:

 

Zum einen gibt es diesen Error:

Error: Bad value https://api.w.org/ for attribute rel on element link: The string https://api.w.org/ is not a registered keyword.

From line 30, column 1; to line 30, column 88

</script>↩<link rel='https://api.w.org/' href='https://DOMAIN/wp-json/' />↩<meta

Hier geht es darum, daß im Attribut rel ein nicht vorgesehener Inhalt angegeben ist.

 

Zum anderen geht es um Warnungen wie diese:

Warning: The type attribute is unnecessary for JavaScript resources.

From line 22, column 1; to line 22, column 119

='all' />↩<script type='text/javascript' src='https://DOMAIN/wp-includes/js/jquery/jquery.js?ver=1.12.4'></scri

Hier wird zu recht bemeckert, dass das Attribut type=“text/javascript“ unnötig ist.

 

Folgendes hab ich daher in das relevante Theme eingebaut:

function my_remove_unwanted_head_actions() {
    remove_action( 'wp_head', 'post_comments_feed_link ', 2 ); 
        // Display the links to the general feeds: Post and Comment Feed
    remove_action( 'wp_head', 'rsd_link' ); 
        // Display the link to the Really Simple Discovery service endpoint, EditURI link
    remove_action( 'wp_head', 'wlwmanifest_link' ); 
        // Display the link to the Windows Live Writer manifest file.
    remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); 
        // remove prev link
    remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); 
        // remove Display relational links for the posts adjacent to the current post.
    remove_action( 'wp_head',      'rest_output_link_wp_head'              );
        // remove Link header for the REST API.
    remove_action( 'wp_head',      'wp_oembed_add_discovery_links'         ); 
        // remove oEmbed discovery links in the website 
    remove_action( 'template_redirect', 'rest_output_link_header', 11 );
        // remove the REST API link tag into page header.
}
add_action('wp_head', 'my_remove_unwanted_head_actions', 0);

Es tut dabei noch mehr als nur den oben gemeldeten Fehler zu beheben. Hier werden alle Angaben aus dem <head> entfernt, die meiner Meinung nach inzwischen obsolet oder unnötig sind.

Für die Warnung über den unnötigen type hab ich den folgenden Filter ergänzt:

function my_remove_type_attr($tag, $handle) {
    return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $tag );
}
add_filter('style_loader_tag', 'my_remove_type_attr', 10, 2);
add_filter('script_loader_tag', 'my_remove_type_attr', 10, 2);

Das ist zwar nicht ganz perfekt und wird nicht all die Fälle abfangen, w0 Script- und CSS-Includes aus Plugins kommen, aber es hilft zumindest dazu, die Ausgaben des Themes sauber zu machen.