toscho.design

WordPress-Plugin: Germanix

Nicht neu, aber bisher ungebloggt: Das Plugin Germanix wandelt Umlaute und viele andere Nicht-ASCII-Zeichen in einen passenden Ersatz um und erstellt daraus Permalinks und Dateinamen. Es ersetzt das längst nicht mehr gepflegte Plugin o42-clean-umlauts.

Germanix schlägt zu, wenn man eine Datei hochlädt oder einen Artikel anlegt. Bei neuen Schlagwörtern, Kategorien, eigenen Taxonomien und Post-Typen natürlich auch.

Ein Beispiel: Einem Artikel mit dem schönen Titel »12 m³ Scheiße« gibt WordPress ohne weitere Plugins den Slug 12-m³-scheise. Jetzt haben wir ohne Not ein Nicht-ASCII-Zeichen darin, und ein entstelltes ß.

Germanix hingegen produziert 12-m3-scheisse. Das paßt besser.

Das Plugin besteht eigentlich aus zweien: Germanix URL für URLs und Dateinamen und Germanix Translate für Übersetzungen im Backend. Beide Plugins lassen sich separat anschalten. Das Übersetzungsplugin werde ich vermutlich irgendwann fallen lassen – außer der Umwandlung von »Dashboard« nach »Übersicht« brennt darin nichts; manche Einträge sind sogar veraltet.

Fehler und Vorschläge wirf bitte in den Bugtracker. Da finde ich sie wieder.
Oder besser noch: Erstelle einen Fork, baue deine Ideen selber ein und sende einen Push-Request zurück.

Solange das Plugin nur bei GitHub liegt und ich keinen eigenen Updateserver eingerichtet habe, wird es keine automatische Aktualisierung geben, nur Hinweise per Twitter. Sorry!

Ich habe neulich ein anderes Plugin – Remove Redundant Links – testhalber im offiziellen Verzeichnis abgelegt und bin schon jetzt so genervt von SVN, daß ich auf weitere Experimente damit wenig Lust verspüre. Ja, git-svn kenne ich. Das nervt auch.
Schließlich geht es mir bei solchen Projekten auch um den Spaß an der Sache, also nicht um SVN.

Momentan wird der Windows-Livewriter noch nicht unterstützt. Wer das braucht, dem empfehle ich Frank Bültges Alternative. Die erfaßt weniger Zeichen und wird im Sprachverzeichnis abgelegt, wo sie sich nicht so einfach abschalten läßt wie ein Plugin. Dafür wandelt sie auch maskierte Zeichen um – das habe ich bisher weder gebraucht noch geschafft.

Weitere WordPress-Plugins

51 Kommentare

  1. Monika am 19.12.2010 · 16:59

    Hallo Thomas, kann ich das o42-clean-umlauts einfach löschen und Deines nehmen?

    Und unabhängig davon, mag ich SVN auch nicht. ;)
    lg
    Monika

  2. Thomas Scholz am 19.12.2010 · 17:09

    @Monika: Ja, du kannst es ersetzen. Nur maskierte Zeichen wie ä werden noch nicht passend umgewandelt. Beim einfachen Eingeben eines Artikels im Backend spielt das aber keine Rolle.

  3. Ivan am 19.12.2010 · 18:41

    Hallo Thomas, ich nutze seit längerer Zeit die Variante ohne Plugin. Was mir bei Deinem Plugin gut gefällt ist, dass Nicht-ASCII-Zeichen auch umgewandelt werden.

  4. Sebastian am 20.12.2010 · 10:32

    Schönes Plugin welches wohl auch demnächst den Einsatz finden wird. Werde dir auf jeden Fall bei Twitter folgen um über Updates informiert zu bleiben. Danke dafür!

  5. Vive am 27.12.2010 · 15:30

    Mi gefällt es auch sehr gut, verwende es nun und bin zufrieden. Ich bedanke mich herzlichst.
    LG Vive

  6. Normen F am 11.01.2011 · 12:54

    Eigentlich genau das richtige was ich bräuchte, allerdings für schon bestehende Beiträge. Also sowas wo ich quasi per Klick sagen kann "Update aller Beiträge" fertig. Jemand eine Idee ??

  7. Thomas Scholz am 11.01.2011 · 20:23

    @Normen F: Technisch nicht so schwierig, man muß allerdings ein bißchen aufpassen: Wenn man einfach den Slug ändert, führen Links auf den Slug nach 404. Also muß man in den Post-Metadaten das Feld _wp_old_slug mit dem alten Slug befüllen, ehe man den neuen setzt. Dann leitet WordPress Requests auf die alten URLs korrekt um. Bei Kategorien, Schlagwörtern etc. funktioniert meines Wissens aber nicht, da muß man dann wohl die .htaccess bemühen.
    Je nach Menge der zu bearbeitenden Posts möchte man die Umwandlung vielleicht in mehrere Schritte aufteilen, um Timeouts zu vermeiden. Dazu kann man entweder das Feld für die letzte Änderungen anpassen oder einen Queue bilden.

    Ich habe im Moment weder Zeit noch Bedarf für so eine Erweiterung. Wer allerdings eine schreiben und dem Repository hinzufügen möchte, sei herzlich eingeladen.

  8. Maik am 17.02.2011 · 22:48

    Das Plugin gefällt mir ganz gut, aber es crasht mit dem Seven Five von Press75. Die Widgets wernden im Backend nicht mehr angezeigt :(

  9. Thomas Scholz am 18.02.2011 · 00:07

    @Maik: Das kann ich mit Version 1.6.1 des Themes nicht nachvollziehen. Welche Version verwendest du? Passiert das auch, wenn du alle anderen Plugins deaktivierst? Funktioniert es mit TwentyTen?

  10. Maik am 18.02.2011 · 00:17

    Habe auch 1.6.1 der Fehler trat auch nicht sofort auf, erst nach einer Weile. Jepp, es passiert auch wenn alle Plugins dekantiert sind, bei anderen Theme wie das TwentyTen oder Bueno von WooThemes tritt der Fehler nicht auf.
    Ich habe dem SevenFive-Theme auch eine zusätzliche Widget-Sidebar hinzugefügt, auch die kann ich mit aktviem Plugin nicht konfigurieren.

  11. Thomas Scholz am 18.02.2011 · 00:28

    @Maik: Dann muß ich leider passen. Gerade die Verzögerung kann ich nicht analysieren. Da hätte ich ein Cache-Plugin im Verdacht, aber wenn du keines benutzt …

    Frag doch dort mal den Support, die kennen ihren eigenen Code sicher besser, und ich sehe im Moment einfach den Zusammenhang nicht zu dem, was Germanix tut.

  12. Thomas Scholz am 25.02.2011 · 01:57

    Update

    In WordPress 3.1 wurde stillschweigend der Zugriff auf den Titel geändert; daher funktionierte das Plugin Germanix URL dort nicht mehr. Bitte holt das Update.

  13. Maik am 25.02.2011 · 11:00

    @Thomas Scholz: Hmm komisch, mit dem Update ist auch mein Widget-Problem gelöst, vielleicht wurde es auch mit WP3.1 gelöst.

  14. Matthias Gräfe am 25.02.2011 · 11:53

    Das Update fürs Plugin wird im Dashboard von WP 3.1 nicht angezeigt - noch nicht?

  15. Matthias Gräfe am 25.02.2011 · 11:56

    Ah - habs grad gerafft mit der Updatebenachrichtigung ;) - schreibst ja oben, dass das am nicht vorhandenen Updateserver liegt.

  16. Thomas Scholz am 25.02.2011 · 12:09

    @Matthias Gräfe: Ich habe jetzt mal auf wordpress.org ein Repository beantragt. Das Plugin wird dann in »Slug Transit« umbenannt, da es schon längst nicht mehr nur auf deutschsprachige Texte beschränkt ist. Sobald das genehmigt ist und ich die Zeit dafür gefunden habe, gebe ich das hier bekannt.

  17. Matthias Gräfe am 25.02.2011 · 12:19

    Supi! Ich folge Dir trotzdem weiter bei Twitter :)

  18. Frank am 26.02.2011 · 09:33

    Danke für den Hinweis in Xing Monika. Dann werde ich ab sofort auch das von Toscho.de nutzen.

  19. Frank am 26.02.2011 · 09:37

    @Thomas Scholz: da bin ich gespannt ob die das genehmigen. Ich versuche schon seit 6 Monaten mit denen in Kontakt zu treten um ein Plugin gelöscht zu bekommen von mir. Keine Reaktion. Support anfragen scheinen dort nicht so priorisiert behandelt zu werden.

  20. Thorsten am 26.02.2011 · 10:54

    Toll! Das Plugin funktioniert super. Nur die Zeichen $ % & werden bei mir in --- umgewandelt. Vermutlich gibt es hierfür noch keine passenden Umwandlungen.

    Beste Grüße
    Thorsten

  21. Michael am 26.02.2011 · 12:33

    @Thomas Scholz: Danke für Dein funktionierendes Plugin. Hatte gerade festgestellt, dass die Umlaute mit dem bisherigen Plugin nicht mehr übersetzt wurden und mich auf die Suche nach einer Lösung begeben.

    Wenn es mit dem Repository auf wordpress.org bald gelingt, freue ich mich.

    Schönes Wochenende!
    Michael

  22. Thomas Scholz am 26.02.2011 · 15:16

    @Frank: Plugins werden (derzeit noch) nicht gelöscht. Frag doch mal Otto im Chat auf IRC. Der ist manchmal ein bißchen kurz angebunden, kann dir aber eine verbindliche Auskunft geben.

  23. Thomas Scholz am 26.02.2011 · 15:20

    @Thorsten: % und & maskieren manchmal Sonderzeichen, die ich sonst nicht erfasse, beispielsweise Kyrillisch. Das steht schon eine Weile auf der Todo-Liste. $ wird in der nächsten Version zu Dollar umgewandelt.

  24. elotse am 10.03.2011 · 13:10

    Danke für dein Plugin, konnte damit mein bisher verwendetes Plugin German Permalinks ersetzten

  25. Benjamin am 28.04.2011 · 22:08

    Hi, ich war gerade beim Testen, ob Germanix auch greift, wenn ich einen Artikel über ein Plugin und wp_insert_post() erstelle. Funktioniert. :)
    Das Problem ist, dass aus einem Titel à la "Nature Time Lapse 2 -微速度撮影動画まとめ2- (HD 720p)" Folgendes wird: "nature-time-lapse-2--hd-720p"

    Das ist ja an sich alles richtig, nur die 2 Minuszeichen stören und öffnet die 404-Seite anstatt des Artikels.

    Liegt es an der japanischen Schrift? Man kann doppelte Minuszeichen in diesem Fall verhindern, indem man remove_doubles() nach lower_ascii() aufruft (Zeile 60 und 61 tauschen).

    Ich habe mich nicht Zeile für Zeile durch den kompletten Code gehangelt und nur noch kurz ein paar andere Testszenarien durchgespielt, dort ist mir aber nichts Gravierendes aufgefallen - hat der Tausch der Funktionen sonst noch negative Auswirkungen?

    Schönen Gruß
    Benjamin

  26. Thomas Scholz am 28.04.2011 · 22:29

    @Benjamin: Danke für den Hinweis! Den Tausch werde ich mir mal ansehen. Im Moment bin ich leider sehr vollgepackt …

    Eigentlich möchte ich Zeichen, die nicht auf dem lateinischen Alphabet beruhen, ein bißchen besser abfangen. Da muß mir aber noch eine wirklich gute Lösung einfallen. Zumindest der 404 dürfte nicht passieren. Ich habe das mal in den Bugtracker gesetzt. Demnächst lege ich einen Plugin-Update-Tag ein und repariere diesen und andere Fehler.

  27. Monika am 29.04.2011 · 07:58

    oh! das doppelte Minus,

    ich habe permalinks title-ID

    und wenn ich einen Titel schreibe mit 3 Punkte hinten, kommt auch ein Minuszeichen -dieses und das Minuszeichen vor der ArtikelID bringt auch eine 404

    jetzt weiß ichs und greif händisch ein, käm aber das nicht mehr, wäre es um einiges einfacher :-)

  28. Thomas Scholz am 29.04.2011 · 09:56

    @Monika: So, jetzt reicht’s. Version 0.9 des URL-Plugins ist raus. :)

    Sieht in meinen Tests ganz gut aus, aber der Bugtracker steht natürlich weiterhin offen …

  29. Benjamin am 29.04.2011 · 10:25

    @Thomas Scholz: Wow, vielen Dank für die schnelle Reaktion! :)

  30. Monika am 29.04.2011 · 14:32

    ok!

    ich mache Dir einfach ne offizielle Liebeserklärung -- *meinliebsterPluginautor* ;)

    recht herzlichen Dank für die so schnelle Reaktion,

  31. Corinna am 18.05.2011 · 09:07

    Tolles Plugin, funktioniert super und lässt Links etc doch schon gleich etwas leserlicher aussehen. Bookmarked, schau sicher hin und wieder wegen eventuellen updates vorbei :)

  32. Torsten am 23.06.2011 · 14:28

    Kriege immer einen Fatal Error beim Aktivieren der Plugins:
    https://github.com/toscho/Germanix-WordPress-Plugin/issues/6

  33. Thomas Scholz am 23.06.2011 · 14:39

    @Torsten: PHP 4 ist so tot, daß ich auf PHP 5 nicht mehr extra hinweise. Für WordPress 3.2 wirst du ohnehin darauf umstellen müssen.

  34. Thomas L. am 08.07.2011 · 22:53

    Hallo Thomas,

    ich habe bei meinem Blog als Permalink-Struktur /%postname%/ eingegeben und habe dann dein Plugin installiert, aber meine Links sind nach wie vor so wie vorher (also z.B. für ein im Titel stehendes "über" steht dort "uber" und nicht "ueber"). Habe probiert eine neue Seite zu erstellen und da funktioniert das Plugin, aber nicht bei den bereits existenten Titeln/Seiten. Warum?

    Auch ist es so, dass die Permalinks nicht geändert werden, wenn ich den Namen einer Seite nachträglich verändere, dann steht im Permalink nach wie vor der alte Name der Seite.

    Wahrscheinlich sind beide Sachen miteinander verknüpft, wäre super, wenn du helfen könntest!

    LG Thomas

  35. Thomas Scholz am 08.07.2011 · 23:09

    @Thomas L.: Bestehende Permalinks faßt das Plugin nicht an, weil es sich dann auch um die Umleitungen von der alten auf die neue Adresse kümmern müßte. Das wäre dann irgendwann einmal ein zweites Zusatzplugin – dafür habe ich aber gar keine Zeit.

    Wenn du schon einmal manuell den Permalink geändert hast oder der Beitrag veröffentlicht wurde, wird Germanix nicht mehr aufgerufen. Es hilft allein bei der automatischen Erstellung des Permalinks, die zu diesem Zeitpunkt abgeschlossen ist.

  36. Thomas L. am 08.07.2011 · 23:21

    OK danke Thomas für die schnelle Antwort.

    Hab die alten Sachen jetzt einfach manuell verändert. Da mein Blog sowieso auf google noch nicht richtig erfasst ist, müsste es ja auch kein Problem sein bezüglich toter Links oder ähnlichem.

    Viele Grüße!

  37. Thomas Scholz am 08.07.2011 · 23:31

    @Thomas L.: Ob es Backlinks gibt und auf welche Seiten die zeigen, sagt dir eigentlich dein Logfile. Hast du keins, hilft dir eventuell der Yahoo-Site-Explorer weiter. Der ist etwas ausführlicher als Googles Backlinkliste.

    Richte sicherheitshalber für die geänderten Links Umleitungen in der .htaccess ein. Zum Beispiel so:

    Redirect permanent /alte-adresse /neue-adresse

    Deine Permalinkstruktur mit dem nackten Postnamen ist übrigens sehr unglücklich, weil sie mit der für die Seiten kollidiert. Lektüre: Die beste URL-Struktur. Permalinks in WordPress.

  38. Thomas L. am 09.07.2011 · 00:16

    Hey Thomas,

    danke nochmal für deine Tipps. Verstehe momentan nur Bahnhof, werde mich aber mit den Sachen beschäftigen.

    Bin ein bisschen verwundert mit der Permalinkstruktur, auf anderen Seiten wurde überall diese Struktur empfohlen (/%postname%/). Kann ich denn eine unterschiedliche Permalinkstruktur für Seiten und für Posts erstellen? Das wäre natürlich in der Tat sinnvoll, bei Posts ggf. das Jahr hinzuzufügen.

    LG Thomas

  39. Thomas Scholz am 09.07.2011 · 00:28

    @Thomas L.: In dem oben verlinkten Artikel zeige ich, was geht und Sinn ergibt. Das bloße /%postname%/ wird von keinem Experten empfohlen. Allenfalls von Leuten, die sich für einen halten. ;)

  40. Thomas L. am 09.07.2011 · 00:37

    OK danke Thomas,

    hab's gecheckt. Die Permalinkstruktur der Seiten bleibt ja davon scheinbar sowieso unberührt, hab jetzt also (für die Posts) die mit /%year%/%postname%/ gewählt.

    Les mich aber in das ganze noch mehr ein, danke für die guten Tipps und Artikel!

    LG Thomas

  41. Alex am 18.07.2011 · 17:01

    Hallo Thomas, das Plugin ist super, vielen Dank. Ich finde es auch sehr schön, dass es keine eierlegende Wollmilchsau ist, sondern ein simples Plugin, das exakt seinen Zweck erfüllt.

    Kleiner Tipp noch: Wenn man die Datei germanix_url.php nach /wp-content/languages/ legt und in de_DE.php umbenennt, wird sie nur ausgeführt, wenn die Sprache des Blogs de_DE ist. Das ist in WPMU/MS-Umgebungen sehr interessant. Vgl. http://www.code-styling.de/deutsch/permalinks-mit-umlauten-ohne-o42-clean-umlauts

  42. Thomas Scholz am 18.07.2011 · 21:16

    @Alex: Ich bin den Weg der sprachgebundenen Datei bewußt nicht gegangen. Da sehe ich keinen Vorteil.

  43. Bernhard am 27.08.2011 · 11:57

    Danke für das Plugin! Ich habe schon lange nach einer Lösung gesucht und bin über texto.de darauf aufmerksam geworden. Es funktioniert auch bestens in einer MU-Umgebung :-)

  44. Ulrich B. am 25.10.2011 · 11:54

    Nur mal so der vollständigkeit halber ( und um die Suchbegriffe hier mit auf der Seite zu platzieren): Dieses nützliche Plugin behebt auch
    Probleme mit Copy-und-Paste aus Word u.a., Backticks, typographische Anführungszeichen und Abführungszeichen, lange Gedankenstriche und andere Dinge, die kreative Überschriftenschreiber in das Titelfeld reinhauen und damit standardmässig die Permalinkerzeugung zerstören ... Danke dafür! Ich wundere mich, dass diese Funktion im Core so störungsanfällig gebaut ist.
    Gruss,
    Ulrich

  45. Michael am 03.01.2012 · 15:08

    Perfekt gelöst... wir nutzen das Plugin in verschiedenen Blogs und immer ohne Probleme... scheint also auch keine Probleme mit anderen Plugins zu geben. Vielen Dank dafür:-) Wollt ich einfach nur mal loswerden.

    Grüße
    Michael

  46. Uwe am 10.01.2012 · 11:05

    Hi Thomas,

    kann man dein Germanix-Plugin auch auf die Suche in WordPress anwenden?

    Ich habe das Problem, wenn ich z.B. nach Bahnhofstraße suche (wo auch Seiten vorhanden sind), dass der dann nach Bahnhofstrae sucht.

    Ich habe ne Suchumleitung drinne:

    /* Redirect für Suchseite */
    function fb_change_search_url_rewrite() {
        if ( is_search() && ! empty( $_GET['s'] ) ) {
            wp_redirect( home_url( "/search/" ) . rawurlencode( get_query_var( 's' ) ) );
            exit();
        }
    }
    add_action( 'template_redirect', 'fb_change_search_url_rewrite' );
    

    Wenn ich das so lasse, dann steht zwar in der URL Bahnhofstraße, aber in der Suche selber kommt das codiert an. Ich habe so langsam keinen Plan mehr, wo ich noch angreifen soll.

  47. Thomas Scholz am 10.01.2012 · 13:15

    @Uwe: WordPress kümmert sich eigentlich um das rawurlencode() selbst. Das siehst du in wp-includes/class-wp.php in der Funktion build_query_string().

    Das heißt: Du brauchst einen zweiten Filter auf 'request', der nachsieht, ob der aktuelle Request deinem oben eingestellten Muster entspricht und nur dann, den Wert q des im Filter übergebenen Arrays mit rawurldecode() behandelt. Da mußt du aber gut aufpassen, daß du dir keine Sicherheitslücke einbaust. Wenn jemand mit /?s=Straße sucht, solltest du den Filter nämlich nicht anfassen.

    Germanix tut etwas anderes, das man grob als Compatibility Normalization bezeichnen könnte. Das brächte dir im vorliegenden Fall gar nichts, denn dann fände die Suche nichts. Die Daten liegen ja nicht normalisiert in der Datenbank.

  48. Uwe am 10.01.2012 · 15:42

    Ich habe es jetzt so und das scheint zu funktionieren:

    /* Redirect für Suchseite */
    function fb_change_search_url_rewrite() {
        if ( is_search() && ! empty( $_GET['s'] ) ) {
    		wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
    		exit();
        }
    }
    add_action( 'template_redirect', 'fb_change_search_url_rewrite' );
    function pcl_urldecode_s($query) {
    	if ( is_search() ) {
    		$query->query_vars['s'] = urldecode( $query->query_vars['s'] );
    	}
    	return $query;
    }
    add_filter('parse_query', 'pcl_urldecode_s');
    

    Wäre dir was bekannt, ob das ne Sicherheitslücke sein kann? Ich bin erst seit 2 Monaten mit WP am doktern, also noch kein Profi.

  49. Thomas Scholz am 10.01.2012 · 15:48

    @Uwe: is_search() im zweiten Filter ist nicht gut genug, du mußt auch prüfen, ob /search/ verwendet wurde. Sonst hast du eine doppeltes urldecode() (deines und das WordPress’), wenn jemand nur /?s=Suchausdruck benutzt. Ob damit prekärer Code eingeschleust werden kann, möchte ich jetzt nicht fest zusagen, ich würde es einfach nicht so machen.

    Und benutze bitte die raw-Funktionen, die behandeln Leerzeichen anders als ein bloßes urlencode().

  50. Uwe am 10.01.2012 · 15:53

    @Thomas Scholz: Wie würdest du denn an diese Situation herangehen? Ich möchte nur gern eine "schönere" URL bei der Suche haben, mehr nicht. Wie kann ich denn auf das /search/ abfragen?

  51. Thomas Scholz am 10.01.2012 · 16:10

    Du solltest in $_SERVER['REQUEST_URI'] das $query->query_vars['s'] entfernen (ebenso einen eventuell angehängten GET-Parameter) und nachsehen, ob das Übriggebliebene mit /search/ endet.