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?
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.