Selbst-Pings auf einer Multisite deaktivieren

In einem Projekt wollte der Kunde alle Pingbacks von der eigenen Seite deaktivieren. Ich habe hierzu ein kleines Snippet gefunden, zu dem es sogar ein fertiges Plugin gibt. Es funktioniert aber nur für die aktuelle Seite. Was macht man also, wenn man auch Pingsbacks zwischen verschiedenen Seiten einer Multisite deaktivieren möchte?

Das erweiterte Snippet

Jedes Mal, wenn ein Beitrag oder eine Seite veröffentlicht oder aktualisiert wird, sendet WordPress einen Pingback an alle URLs aus dem Inhalt. Um die Liste der anzupingenden Seiten zu verändern, können wir die Action pre_ping mit einer einfachen Callback-Funktion verwenden:

function multisite_no_self_ping( &$links ) {
	$sites     = get_sites();
	$site_urls = array();

	foreach ( $sites as $site ) {
		$site_urls[] = get_home_url( $site->blog_id );
	}

	foreach ( $links as $key => $link ) {
		foreach ( $site_urls as $site_url ) {
			if ( 0 === strpos( $link, $site_url ) ) {
				unset( $links[ $key ] );
			}
		}
	}
}
add_action( 'pre_ping', 'multisite_no_self_ping' );

Zuerst holen wir uns alle Seiten der Multisite und deren Home-URLs. Danach iterieren wir über alle Links, die WordPress anpingen würde. Wenn eine dieser Links mit einer der Home-URLs beginnt, entfernen wir ihn aus der Liste der zu pingenden Links. Da diese Liste als Referenz übergeben wird, müssen wir am Ende der Funktion nichts zurückgeben.

Fazit

Das ist schon alles. Durch dieses einfache Snippet können wir alle Pingbacks auf einer Multisite untereinander deaktivieren. Diese Pingbacks würden die meisten Nutzer ohnehin löschen. Der beste Weg, dieses Snippet in die eigene WordPress Installation zu bekommen ist natürlich durch ein Plugin, das ich euch in einem Gist vorbereitet habe.

Was meint ihr? Löscht ihr interne Pingbacks auch immer? Oder kennt ihr vielleicht einen Anwendungsfall, in denen sie nützlich sein könnten?

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

3 Kommentare » Schreibe einen Kommentar

  1. Hallo Bernhard,
    ein super Tipp, für den ich gleich Verwendung habe. Vielen Dank!
    Ich setze das aber nicht als eigenes Plugin ein, sondern nutze für sowas immer das Plugin „Toolbox“ von Sergej Müller, mit dem man solche Snippets bei Bedarf einfach je Site aktivieren kann. Da „Toolbox“ nicht mehr weitergepflegt wird, scheint mir das Plugin „Code Snippets“ (https://wordpress.org/plugins/code-snippets/) eine gute Alternative.
    Gruß
    Bernhard

    • Danke für den Tipp Bernhard.

      Genau dieses „per Site aktivieren“ geht ja auch wunderbar mit einem richtigen Plugin 😉
      Und man braucht eben nicht noch ein Zusatzplugin, in das man ein solches Snippet einfügt.

      • Klar, mit einem extra Plugin geht das immer. Ich habe allerdings zahlreiche kleine Snippets (z.Zt. ca 15, z.B. deaktivieren von Emojis, aber auch sehr inhaltsspezifische Funktionen) im Einsatz, die ich in der Toolbox bzw. im Code Snippets-Plugin besser aufgehoben finde, als in der functions.php, die ja immer an´s Theme gebunden ist. So nutze ich in einer Multisite-Installation ein Theme für verschiedene Sites nutzen und kann trotzdem site-spezifische Snippet-Funktionen aktivieren.

Schreibe einen Kommentar

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