fob marketing

Permalinks in WordPress 2.2 reparieren

Gestern Abend, kurz vor Mitternacht: „So, jetzt kurz noch das WordPress-2.2-Update aufspielen und ab in den Feierabend.“ … Oder auch nicht!

Ich finde es ja klasse, dass WordPress so rasant weiterentwickelt wird. Dumm nur, wenn man ein Update aufspielt und sich dabei herausstellt, dass man soeben massenweise Double Content produziert hat und somit zum Google-Abschuss freigegeben wurde. Urgs… Was nun?

Die Sache betrifft alle WordPress-Nutzer, welche für ihre Blog-Einträge Permalinks verwenden, die auf .html enden:

Leider hat sich nach dem 2.2-Update herausgestellt, dass die WordPress-Entwickler mit dem jüngsten Update eine Permalink-Veränderung eingeführt haben. Bei mir hatte diese Änderung zur Folge, dass nach dem Update fast kein einziger Link mehr dorthin zeigte, wo er früher einmal hingezeigt hat… So stand ich vor der Wahl, sämtliche Blog-Adressen zu ändern, indem ich statt .html-Seiten ab sofort einen „Trailing Slash“ verwende („/“ statt „.html“) oder den Trailing Slash von sämtlichen anderen Seiten entferne. Schöner Mist! Massenweise Redirects wollte ich natürlich nicht haben. Um eine Nachtschicht zu vermeiden, habe ich erst einmal zur .htaccess-Datei gegriffen:

# Add Trailing Slash
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]

Dieser Eintrag sorgte schon eimal dafür, dass sämtliche Links, die plötzlich keinen „Trailing Slash“ mehr hatten, auf das ursprüngliche Linkziel weitergeleitet wurden. Nicht schön aber zwingend notwendig.

Heute habe ich mir nun etwas Zeit genommen, das neue WordPress 2.2 unter die Lupe zu nehmen und bin dem Übel glücklicherweise auf die Spur gekommen. Um die alten Permalinks wieder herzustellen, sind zwei Änderungen in einer Datei namens „link-template.php“ erforderlich. Diese liegt im Ordner „wp-includes„:

1. Korrektur der Funktion „function user_trailingslashit“:

Diese ist zu ersetzen mit:

function user_trailingslashit($string, $type_of_url = '') {
global $wp_rewrite;
$string = trailingslashit($string);
// Note that $type_of_url can be one of following:
// single, single_trackback, single_feed, single_paged, feed, category, page,
// year, month, day, paged
$string = apply_filters('user_trailingslashit', $string, $type_of_url);
return $string;
// Anmerkung: Unsere .html-Seiten sind davon nicht betroffen!
}

2. Korrektur der Rewrite Rules für Blog-Einträge:

Außerdem muss die Zeile:

// $permalink = user_trailingslashit($permalink, 'single');

auskommentiert werden. Ansonsten würde aus .html .html/ werden, was wir natürlich nicht wollen.

Wer diese drei Ersetzungen (1x .htaccess, 2x link-template.php) hinter sich hat, verfügt wieder über seine alten Permalink-Strukturen. Nun kann man schadlos weitermachen – mit WordPress 2.2 vermutlich besser als jemals zuvor. 😉

Falls jemand keine Lust hat, seine Permalinks selbst zu korrigieren – hier gibt`s die passende Datei zum Download, natürlich kostenlos aber auf eigene Gefahr. Einfach in den Ordner „wp-includes“ kopieren und weitermachen… Dann stimmen die eigenen Links wieder. Um fehlerhafte Fremdverlinkungen zu vermeiden, würde ich die .htaccess-Ergänzung aber zusätzlich vornehmen. Ein „Permalink-Plugin“ braucht man dann übrigens nicht mehr…

Die mobile Version verlassen