Antwort auf meinen Bugreport

Vor ein paar Tagen berichtete ich von meinem Bugreport. Nun hat mir Charles Johnson eine Mail gesendet und sich für den Bugreport und auch noch für die Lösung bedankt und das dies Teil der nächsten Version sein wird. Aktuell wurde es bereits in die Developer-Version eingebaut 🙂

Dort steht nun in der Datei:

function syndication_permalink ($permalink = '') {
	global $feedwordpress_the_original_permalink;
	
	// Save the local permalink in case we need to retrieve it later.
	$feedwordpress_the_original_permalink = $permalink;

	// Map this permalink to a post ID so we can get the correct permalink
	// even outside of the Post Loop. Props Björn.
	$id = url_to_postid($permalink);

Ja Leute, nun werde ich berühmt 🙂

Fehlerhafte Links in der Sidebar bei WordPress

Vorhin ist mir aufgefallen, dass die Links zu den letzten Kommentaren in der Sidebar fehlerhaft waren. Sie zeigten sogar in ein falschen Blog. Ich dachte, es läge an der WordPress MU Installation. Also spielte ich mit den Einstellungen herum und verschlimmbesserte nur noch alles. Also ging ich einen anderen Weg und versuchte dem Fehler auf die Schliche zu kommen, in dem ich die Funktionen testete. Das ist aber recht schwierig, da das WordPress Backend mittlerweile riesig ist und wenn man nicht Up-To-Date ist, hat man absolut keine Chance. Also den Königsweg gegangen und nach und nach alle Plugins deaktiviert und schon hatte ich den schuldigen gefunden: FeedWordpress

Das Plugin sorgt dafür, dass der RSS Feed anderer Blogs ausgelesen werden und hier als eigene Einträge erscheinen. Damit der Fehler reproduzierbar ist, müssen folgende Voraussetzungen erfüllt sein:
– Bei FeedWordpress muss unter Einstellungen -> „Posts & Links“ -> Permalink auf „point to the copy on the original website“ stehen
– der letzte Eintrag der Seite muss ein per Feed importierter Eintrag sein
– Das Widget „Recent_Comments“ oder jede andere Funktion, dass einen Permalink per „get_permalink()“ zu holen versucht, muss „nach“ diesem bestimmten Beitrag ausgeführt werden

Um den Fehler zu verstehen, schauen wir kurz in die „feedwordpress.php“ im Pluginverzeichnis.
Dort steht folgendes:

function syndication_permalink ($permalink = '') {
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink();
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

In unserem Fall ruft er also die Funktion „get_syndication_permalink()“ ohne Parameter auf:

function get_syndication_permalink ($id = NULL) {
	list($u) = get_post_custom_values('syndication_permalink', $id); return $u;
}

Als Defaultwert ist NULL angegeben. Ein Blick in den WordPress-Codex verrät, dass er das Benutzerdefinierte Feld des aktuellen Eintrags laden versucht. Das ist logischerweise noch der aus dem Feed importierte Eintrag und daher lädt er eine falsche URL.

Um das Problem zu beheben, einfach den Code oben durch folgenden ersetzen:

function syndication_permalink ($permalink = '') {
	$id = url_to_postid($permalink);
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink($id);
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

Die „url_to_postid()“ ist eine WordPress-eigene Funktion. Nun funktioniert es wieder. Darauf muss man erstmal kommen!