Blog

WordPress: Interne Pings verbannen

Es ist eine nützliches Hilfsmittel, dass WordPress von Haus aus beherrscht und wohl von den meisten Hardcore-Bloggern genutzt wird: Unter Einstellungen – Diskussion findet sich die Option „Versuch jedes verlinkte Weblog vom Beitrag zu benachrichtigen“, die es ermöglicht, ohne die Eingabe einer entsprechenden Trackback-URL verlinkte Blogs von dem relevanten Beitrag in Kenntnis zu setzen. Erlaubt der andere Blogger so genannte Pingbacks, dann stehen die Chancen gut, mit einem Backlink in dessen Kommentarliste aufzutauchen. Das begünstigt die Vernetzung themenverwandter Inhalte und lockt obendrein noch potenzielle Neuleser auf das eigene Weblog. Leider macht dieses nützliche Feature vor internen Links nicht Halt und so werden Links von eigenen Beiträgen von WordPress auch als Pingbacks anerkannt und ausgegeben.

Ich persönlich wollte dieser unfreiwilligen Internverlinkung ein Ende bereiten, war allerdings nicht dazu bereit die „internen Pings“ immer per Hand zu löschen. Die gute Nachricht: Mit ein paar kleinen Änderungen an der Datei comments.php des WordPress-Themes der Wahl ist die Sache gelaufen. :-)

Das Ende unerwünschter „Intern-Pings“

Das Ziel

Mit dem folgenden Workaround werden Pingbacks, die von Beiträgen im eigenen Blog abgesetzt werden, nicht mehr im Kommentar- bzw. Trackbackbereich ausgegeben.

Der Lösungsweg

Folgende Änderungen finden alle innerhalb des sogenannten „Kommentar-Loops“ statt. Im Default-Theme ist dies der Bereich zwischen

<?php foreach($comments as $comment) : ?>

und

<?php endforeach; /* end for each comment */ ?>

Zunächst muss ein Kommentar als Pingback identifiziert werden. Dies geschieht mithilfe der Funktion get_comment_type(), die im Übrigen die Werte 'comment' für einen Kommentar im eigentlichen Sinne, 'trackback' für einen gezielten Ping an die Trackback-URL des Beitrages oder eben 'pingback' für einen automatisch erzeugten Ping durch Verlinkung. (Weitere Infos hierzu bei kk-works.de und bueltge.de)
Nach dem Aschenputtel-Prinzip sortieren wir uns nun die gewünschte Gruppe heraus:


<?php
	if ( get_comment_type() == 'pingback' ) : // Pingback?

Nun kommt der eigentliche Knackpunkt: Dass ein Ping vom gleichen Blog kommt, lässt sich daran erkennen, dass der übermittelte Beitragslink auf die selbe Domain zeigt. Pingbacks, auf die das zutrifft, wollen wir aussortieren. Hier hilft uns die PHP-Funktion parse_url() weiter. Sie kann einzelne Komponenten einer übergebenen URL ausgeben. Genau das, was wir brauchen!


	$trackback_host = parse_url(get_comment_author_url(), PHP_URL_HOST);
	$blog_host = parse_url(get_bloginfo('url'), PHP_URL_HOST);

Die Variable $trackback_host enthält nun die Hostadresse des pingenden Blogs, $blog_host die des eigenen WordPress-Blogs. Beide Werte liegen im Format www.eineurl.de vor und müssen nun nur noch miteinander verglichen werden:


	if ( $trackback_host != $blog_host ) : ?>

	<div class="trackback">
		[…]
	</div>

<?php
	endif;

	endif; // Ende: Pingback?
?>

Ist also die Adresse des pingenden Blogs eine andere als die eigene, wird der entsprechende Pingback ausgegeben.

Das Endergebnis

Hier noch einmal der gesamte Code auf einen Blick:


<?php
	if ( get_comment_type() == 'pingback' ) : // Pingback?

		$trackback_host = parse_url(get_comment_author_url(), PHP_URL_HOST);
		$blog_host = parse_url(get_bloginfo('url'), PHP_URL_HOST);

		if ( $trackback_host != $blog_host ) : ?>

		<div class="trackback">
			[…]
		</div>

<?php
		endif;

	endif; // Ende: Pingback?
?>
Fazit

Wer, wie ich, interne Pings nicht auf der Seite anzeigen lassen möchte, sollte sich diesen Lösungsweg einmal ansehen. Die entsprechenden Einträge bleiben in der Datenbank erhalten und können bei Bedarf jederzeit wieder ausgegeben werden.
Viel Spaß beim Ausprobieren!

Was meinst’n du?

Es gibt bisher 7 Reaktionen auf diesen Beitrag.

1 Track-/Pingback

  1. Trackback: Dimension 2k am 27.04.2007, 16:14 Uhr

    Wordpress: eigene Pingbacks ausschließen... Vasily, bitte nur ein Ping … leider macht Vasily äh Wordpress auch vor internen Links nicht Halt ...

6 Kommentare

  1. Hi flo,
    bin gerade auf deine nette anleitung gestoßen, allerdings entspricht meine comments.php nicht deinen vorgaben. bei mir gibts keinen comments type pingback. da ich leider auch nicht so php versiert bin, kann ich mir das auch nicht so umbasteln dass es die internen pingbacks wegläßt und trotzdem funktioniert.
    gibts da evtl. noch eine andere möglichkeit mit hilfe eines plugins oder so?

  2. @pasQualle: Meines Wissens nach gibt es leider kein Plugin für diese Zwecke. Deshalb habe ich das Tutorial ja auch geschrieben.

    Der Comment-Type Pingback ist in Wordpress standardmäßig integriert und kann wie oben beschrieben abgefragt werden. Für genauere Hilfestellung müsste ich den Quellcode deiner comments.php sehen.

  3. Hi!
    Super Sache! Vielen Dank.
    Hab schon befürchtet, im Core rumfummeln zu müssen :D

    bestes,
    m.

  4. Hallo!
    Tolle Sache, genau so was habe ich gesucht!

    Nur ein Problem stellt sich mir: Im Titel über den Kommentaren steht bei mir “Eine Reaktion zu XYZ”. Wenn dieser interen Pingback nun diese eine Reaktion ist, erscheint die unten zwar nicht, aber der Titel bleibt und verspricht einen Beitrag, der dann nicht da ist. Klar was ich meine?

    Hab ich den Code falsch eingefügt, oder lässt sich das mit deinem Code nicht beheben? Man müsste ja irgendwie die comments_number jeweils um eins reduzieren wenn ein interner Pingback vorliegt … Meine php-Kenntnisse reichen da leider bei weitem nicht aus.

    Gruss
    Dani

  5. Ich bin jetzt auch nicht so der PHP-Guru. Vielleicht könnte man irgendwie die internen Pings vorher zählen und von der comments_number abziehen. Aber das übersteigt leider auch meine Fähigkeiten. Sorry.

  6. Super! Funktioniert - Danke dir!

    Schön ist, dass nichts gelöscht wird und man eigene Pingbacks später z.B. auch dazu verwenden könnte, um Verwandschaften zwischen einzelnen Posts zu bilden (ich weiß - dafür gibts ja auch Plugins…)

Hinterlasse einen Kommentar

Achtung: Das Feld Homepage dient lediglich zur Angabe der eigenen privaten Seite (falls vorhanden).
Links zu kommerziellen Inhalten sind nicht erwünscht und werden von mir gelöscht.

* Pflichtfeld

Werbung