WordPress liefert allerhand im HTML-Code aus, das man vielleicht nicht drin haben möchte.
Man kann den HTML-Code entschlacken, indem man unten stehenden Code bzw. den Teil davon, den man für sinnvoll hält, in der functions.php des WordPress Themes ergänzt.
Für einige der Einstellungen gibt es auch extra Plugins, wobei für diese Änderungen ein paar Zeilen in der functions.php sicher geschickter sind.
Entfernen einzelner Elemente aus der WordPress HTML Ausgabe
Hinweis: Das Verschleiern und Unterdrücken von Versionsnummern ist eine gute Praxis, schafft jedoch keine Sicherheit. Bitte verwenden Sie stets aktuelle Software-Versionen, also u.a. ein aktuelles WordPress mit aktuellen Plugins.
wp_generator
Die WordPress Version wird im HTML Code angegeben:
<meta name="generator" content="WordPress 4.7.5" />
wird entfernt mit
remove_action('wp_head', 'wp_generator');
Möchte man zusätzlich auch z.B. im Feed (/feed und weitere) die Generator-Angabe entfernen:
function remove_wp_generator() { return ''; } add_filter('the_generator','remove_wp_generator');
rsd, wlwmanifest
Links für Weblog Clients und den „Windows Live Writer“
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.example.com/xmlrpc.php?rsd" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.example.com/wp-includes/wlwmanifest.xml" />
entfernt man mit
remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link');
prev / next Links
Dienen der Angabe einer Reihenfolge von Beiträgen. Ob man die Angabe benötigt, kann man sich überlegen – tut auch nicht weh, sie drin zu lassen.
<link rel='prev' title='Hier ist die Seite davor' href='http://www.example.com/apfelernte' /> <link rel='next' title='Hier ist die Seite danach' href='http://www.example.com/traubenlese' />
wird entfernt mit
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
Veraltete Funktionen dafür:
// veraltete Funktionen // remove_action('wp_head', 'start_post_rel_link'); // remove_action('wp_head', 'index_rel_link'); // remove_action('wp_head', 'parent_post_rel_link', 10, 0); // remove_action('wp_head', 'start_post_rel_link', 10, 0);
Shortlink der aktuellen Seite
<link rel='shortlink' href='http://www.example.com/?p=5' />
Sowie der Shortlink im http Header
werden entfernt mit
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0); remove_action('template_redirect', 'wp_shortlink_header', 11, 0);
Emoji js, css und dns-prefetch von s.w.org
WordPress schreibt javascript und css Code ins HTML, um Emojis zu unterstützen – egal ob man sie verwendet oder nicht.
Den Code kann man entfernen mit
remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' );
Neu hinzugekommen ist ein dns-prefetch, offenbar ebenfalls im Zusammenhang mit Emojis. „s.w.org“ ist eine WordPress Domain.
<link rel='dns-prefetch' href='//s.w.org' />
entfernt man mit
add_filter( 'emoji_svg_url', '__return_false' );
RSS Feeds: Beiträge (posts) und Kommentare
RSS Feeds können praktisch sein, wenn man laufend neue Beiträge auf der Seite hat. Falls man diese Funktion nicht nutzt, kann man die Verweise auf die Feeds auch entfernen (die Feeds selbst sind noch vorhanden):
// Post+Kommentar+Kategorie Feed entfernen remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3);
Falls man dem Benutzer dann doch die RSS-Feeds der Beiträge anbieten möchte, muss man das anschließend wieder aktivieren:
// Post RSS-Feed wieder einschalten add_action('wp_head', 'reinsert_post_feed'); function reinsert_post_feed() { echo '&amp;amp;amp;lt;link rel="alternate" type="application/rss+xml" '. 'title="Backclub Nomnom e.V. Feed" href="'.get_bloginfo('rss2_url').'" /&amp;amp;amp;gt;'; }
REST Api und json
Im HTML Code findet man u.a. (Zeilen gekürzt):
<link rel="alternate" type="application/json+oembed" href="http://www.example.com/wp-json/oembed/..." /> <link rel="alternate" type="text/xml+oembed" href="http://www.example.com/wp-json/oembed/...format=xml" />
Sofern man die REST Api nicht verwendet, also nicht automatisiert von Extern auf Beiträge zugreifen möchte (mehr Informationen zu dieser Api siehe WordPress Seiten), kann man die Zeilen inkl. json API entfernen:
// REST Api Hinweise entfernen remove_action('wp_head', 'rest_output_link_wp_head'); remove_action('wp_head', 'wp_oembed_add_discovery_links'); remove_action('template_redirect', 'rest_output_link_header', 11, 0); function remove_json_api () { // REST API Zeilen aus dem HTML Header entfernen remove_action('wp_head', 'rest_output_link_wp_head', 10); remove_action('wp_head', 'wp_oembed_add_discovery_links', 10); // REST API endpoint entfernen remove_action('rest_api_init', 'wp_oembed_register_route'); // oEmbed auto discovery entfernen add_filter('embed_oembed_discover', '__return_false'); // oEmbed results nicht filtern remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10); // oEmbed discovery links entfernen remove_action('wp_head', 'wp_oembed_add_discovery_links'); // oEmbed-JavaScript entfernen remove_action('wp_head', 'wp_oembed_add_host_js'); // rewrite rules zum Einbetten entfernen add_filter('rewrite_rules_array', 'disable_embeds_rewrites'); } add_action( 'after_setup_theme', 'remove_json_api' );
Beispiel
/* Diverse Einstellungen für die functions.php (dort am Ende einfügen) */ // Diverse Einträge entfernen remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); // Generator-Angaben, z.B. im Feed, entfernen function remove_wp_generator() { return ''; } add_filter('the_generator','remove_wp_generator'); // prev+next Links in Beiträgen entfernen remove_action('wp_head', 'adjacent_posts_rel_link_wp_head'); // shortlink entfernen remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0); // Post+Kommentar+Kategorie RSS Feed-Links entfernen (entfernt nicht die Feeds selbst) remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); // wp Versions-Parameter ?ver=... von Skripts entfernen, falls unsere WordPress-Version angegeben wird function vc_remove_wp_ver_css_js( $src ) { if ( strpos($src, 'ver='. get_bloginfo('version') ) ) $src = remove_query_arg('ver', $src); return $src; } add_filter('style_loader_src', 'vc_remove_wp_ver_css_js', 9999); add_filter('script_loader_src', 'vc_remove_wp_ver_css_js', 9999); // Emoji js, css und dns-preload entfernen remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles'); add_filter('emoji_svg_url', '__return_false'); // REST Api Hinweise entfernen remove_action('wp_head', 'rest_output_link_wp_head'); remove_action('wp_head', 'wp_oembed_add_discovery_links'); remove_action('template_redirect', 'rest_output_link_header', 11, 0); function remove_json_api () { // REST API Zeilen aus dem HTML Header entfernen remove_action('wp_head', 'rest_output_link_wp_head', 10); remove_action('wp_head', 'wp_oembed_add_discovery_links', 10); // REST API endpoint entfernen remove_action('rest_api_init', 'wp_oembed_register_route'); // oEmbed auto discovery entfernen add_filter('embed_oembed_discover', '__return_false'); // oEmbed results nicht filtern remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10); // oEmbed discovery links entfernen remove_action('wp_head', 'wp_oembed_add_discovery_links'); // oEmbed-JavaScript entfernen remove_action('wp_head', 'wp_oembed_add_host_js'); // rewrite rules zum Einbetten entfernen add_filter('rewrite_rules_array', 'disable_embeds_rewrites'); } add_action('after_setup_theme', 'remove_json_api');
Weitere Einstellungen
Sprachauswahl beim Login ins Backend entfernen
Dazu Folgendes in der functions.php des Themes ergänzen:
// Sprachausawahl im Backend-Login deaktivieren add_filter( 'login_display_language_dropdown', '__return_false' );
xml-rpc-Schnittstelle
WordPress schreibt ggf., sofern man pingback im Backend beim Erstellen von Seiten / Beiträgen angegeben hatte, den Link mit in den HTML-Code. Allerdings ist die xml-rpc-Schnittstelle standardmäßig auch dann auf http://www.example.com/xmlrpc.php aktiviert, wenn man sie nicht im HTML propagiert.
Sofern man die xml-rpc-Schnittstelle nicht benötigt (für pingback-Funktion, Zugriff über Smartphone-App etc.), kann man den Zugriff darauf verweigern, z.B. in der .htaccess (Apache Webserver):
RedirectMatch 403 /xmlrpc.php