No .htaccess Redirect: mein erstes WordPress Plugin

Man kennt sein CMS erst dann so richtig, wenn man selber Teile oder Plugins dafür programmiert hat. Mit „No .htaccess Redirect“ schlage ich demnach zwei Fliegen mit einer Klappe: Mein CMS und ich lernen uns kennen und ich bekomme endlich Menschen lesbare und Suchmaschinen freundliche URLs für Posts.

Die Tatsache, dass ich mit meinem Webpaket wenig Spektakuläres in Richtung .htaccess ausrichten kann, lässt meine Blog-URLs so aussehen:

http://stefan-reimers.de/?p=154

Nichtssagend, uninteressant für Suchmaschinen und letztlich unbrauchbar für mein Google Analytics und Co. Da wäre ein Link wie

http://stefan-reimers.de/blog/no-htaccess-redirect-mein-erstes-wordpress-plugin.php

doch viel schöner.

Eine einfache und verständliche Anleitung zum Erstellen eigener Plugins findet sich im WordPress Codex. Die Lektüre bedarf keiner fünf Minuten. Weiterführende Links zur Plugin API inklusive einer Liste aller Anknüpfpunkte (Hooks) in das WordPress System befinden sich ebenfalls auf der Seite.

Und dann kann es auch schon losgehen: Das Plugin soll bei jedem Erstellen, Ändern oder Löschen eines Posts eine Datei in einem bestimmten Verzeichnis anlegen bzw. aktualisieren oder entfernen. Inhalt dieser Datei ist lediglich ein Forward auf den eigentlichen Post-URI, nur dass diese Linkdatei einen sprechenden Namen bekommt. Als Namen verwende ich beispielsweise den „Post Slug“, der in WordPress unter dem Namen „post_name“ firmiert. Darüber hinaus muss bei Ausgabe aller Permalinks auf die URL der Linkdatei umgelenkt werden. Die Hooks dazu sehen wie folgt aus:

add_action('edit_post','no_htaccess_renew');
add_action('delete_post','no_htaccess_delete');
add_filter('post_link','no_htaccess_link');

Die Action-Hooks sorgen dafür, dass bei jedem Drücken des Save, Publish oder Delete Buttons für Posts die Linkdateien verwaltet werden. Der Filter-Hook überschreibt die Links. Das Anlegen und Löschen der Dateien ist für PHP Geübte dann reine Formsache. Beispielhaft hier die Funktion no_htaccess_delete:

function no_htaccess_delete($post_ID){
//creation of post object
$mypost = get_post($post_ID, ARRAY_A);
//delete file
@unlink($mypost['post_name'].".php");
return $post_ID;
}