Post Slug

Jun 2004
04

Der Post Slug ist in WordPress der Permalink-Name eines Eintrages. Musste erstmal bei leo nachgucken was das überhaupt heisst, das klingt für mich nämlich eher anrüchig ;-)

Jedenfalls hab ich mich gefragt, warum in meinem Ping-O-Matic Eintrag der Permalink nicht stimmt. Das sollte ursprünglich ein anderer Artikel werden und beim ändern des Titels ändert WordPress den Slug nicht. Also müsste man das selbst machen, aber zu spät, schon verlinkt ;-)

PapaScott hat ein nützliches Plugin geschrieben damit Umlaute im Titel in korrekte Slugs umgewandelt werden, ich hab mich da mit simplerem PHP begnügt:

function sanitize_title_with_dashes($title) {
    setlocale(LC_CTYPE, 'de_DE');
    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = preg_replace('/[^a-z0-9üäöß -]/', '', $title);
    $title = preg_replace('/\s+/', ' ', $title);
    $title = trim($title);
    $title = str_replace(' ', '-', $title);
    $title = str_replace('ü', 'ue', $title);
    $title = str_replace('ä', 'ae', $title);
    $title = str_replace('ö', 'oe', $title);
    $title = str_replace('ß', 'ss', $title);
    $title = preg_replace('|-+|', '-', $title);    
    return $title;
}

funktioniert aber auch nur für deutsche high-ASCIIs.

Kommentare (4):

#1 Tobias → http://www.royal-ts.de

Und wie bekomme ich diesen Code innerhalb von WordPress ans Laufen? (sorry, absoluter WP und PHP newbie)

#2 Flo → http://theflow.de

Die Plugin-Variante von PapaScott ist sicherlich die zukunftssichere, da man da nicht bei jedem Update das nochmal machen muss. Wie man Plugins installiert steht im Wiki.

Bei meiner Variante musst du nur die entsprechende Funktion in wp-include/functions-formatting.php mit dem oben angebenen Code ersetzen

#3 dogfood

Täusche ich mich, oder ist da ein Fehler drin? Zeile 6 (die dritte “preg_replace”-Zeile). Ist es nicht ‘\s’ statt ‘s’ um die white spaces und nicht alle kleine ‘esse‘ zu erwischen?

#4 Flo → http://theflow.de

Japp, den Backslash hattte WordPress gefressen