WordPress: Umwandlung von doppeltem Minus-Zeichen (Double Dash) in Gedankenstrich unterbinden

6 Februar 2014 6 Kommentare Autor: Jürgen (jdo)

Ich weiß nicht, wie oft ich die Datei formatting.php schon bearbeitet habe. Das Problem ist, dass WordPress ein doppeltes Minuszeichen / Double Dash in einen – Gedankenstrich / &#8211; umwandelt. Das macht die Software dann nicht, wenn man den Inhalt in <code>…</code> einbettet. Die Datei formatting.php wird dummerweise dann und wann mit WordPress-Updates aktualisiert und somit sind meine Änderungen wieder Null und Nichtig.

Möchte man dies auch außerhalb von <code>…</code> verwenden, nervt dieses Verhalten unglaublich. Ich habe mich bisher geweigert, das in meiner functions.php und sozusagen über das Theme zu korrigieren. Es macht nämlich irgendwie keinen Sinn.

  • Ich schreibe im Text ein doppeltes Minuszeichen
  • Dann wandelt es WordPress in ein –
  • Und ich wandle es via functions.php wieder zurück

Hier fehlt dringend eine Option in den Einstellungen, dieses Verhalten zu unterbinden. Ich wurde darauf hingewiesen, dass der Code in diesem Beitrag durch dieses Verhalten falsch ist (war). Nun ist es mir endgültig zu dumm und ich ändere das wider Willen in der functions.php. Der Code / Filter dafür sieht so aus.

  1. add_filter( 'the_content' , 'mh_un_en_dash' , 50 );
  2. function mh_un_en_dash( $content ) {
  3. $content = str_replace( '&#8211;' , '--' , $content );
  4. return $content;
  5. }

Ein ähnliches Problem gibt es bei ‘ und ’ – das würde ich gerne als einzelnes Anführungszeichen sehen: ‘

Dazu musst Du die HTML-Zeichen &#8216; (linkes einzelnes Anführungszeichen) und &#8217; (rechtes einzelne Anführungszeichen) in &#39; wandeln. Das schreibt man dann aber nicht drei Mal hin, sondern benutzt ein Array dafür – und den ganz langen Strich —(&#8211;) nehmen wir auch gleich noch mit raus – der nervt mich auch.

  1. add_filter( 'the_content' , 'mh_un_en_dash' , 50 );
  2. function mh_un_en_dash( $content ) {
  3.         $old_stuff = array("&#8211;", "&#8212;", "&#8216;", "&#8217;");
  4.         $new_stuff   = array("--", "-", "'", "'");
  5.         $content = str_replace($old_stuff, $new_stuff, $content);
  6.         return $content;
  7. }

Das funktioniert irgendwie, irgendwo – aber nicht dann, wenn so etwas im Text steht: [Leerzeichen][Minus][Leerzeichen] oder [Leerzeichen][Minus][Minus][Leerzeichen]. In solchen Fällen wird ebenfalls wieder umgewandelt.

Ist irgendwie irrsinnig und bescheuert. Was man machen kann, ist die komplette Umwandlerei abstellen – was ich nun im Endeffekt gemacht habe – und zwar gleich überall (functions-php).

  1. remove_filter ('the_content', 'wptexturize');
  2. remove_filter ('comment_text', 'wptexturize');
  3. remove_filter ('single_post_title', 'wptexturize');
  4. remove_filter ('the_title', 'wptexturize');
  5. remove_filter ('the_excerpt', 'wptexturize');

Eigentlich würde man (zumindest ich) sich an dieser Stelle eine etwas genauere Kontrolle wünschen.



Du kannst gerne Deinen Senf zu diesem Beitrag geben: Hier geht es zu den Kommentaren


Schreiben macht durstig! Eine kleine Erfrischung kann daher nie schaden. Wem dieser freie Artikel gefallen hat, der darf mir gerne einen frisch gezapften Hopfen-Tee ausgeben (Paypal - der Spenden-Knopf
oder bitcoin - Adresse: 1NacVNwcLLePUVv8uSafu5Ykdwh8QyDfgK). Ich freue mich über jede noch so kleine Spende. Vielen Dank und Prost!
 Alle Kommentare als Feed abonnieren

6 Kommentare zu “WordPress: Umwandlung von doppeltem Minus-Zeichen (Double Dash) in Gedankenstrich unterbinden”

  1. Struppi sagt:

    In meinem Blog war das Problem, dass der Javascript Code immer zerstört wurde, aus && wurde && und der Code funktionierte nicht mehr. Was blöd ist, wenn man einen Blog über Javascript hat :-(

    Theoretisch hätte ich natürlich den Code auch auslagern können, wenn man aber nur ein paar Zeilen Code hat, ist das nicht praktikabel.

    Daher hatte ich anfänglich auch immer die functions.php gefixed. Mittlerweile habe ich die Funktionen in ein Plugin eingebaut. Das Plugin besteht nur aus drei Zeilen:

    remove_action('the_content', 'convert_chars');
    remove_action('the_content', 'wptexturize');
    remove_action('the_content', 'wpautop');

    Das hat den Vorteil, dass bei einem Templatewechsel die Funktionalität erhalten bleibt.

  2. Rayman sagt:

    Hallo Jürgen,

    warum möchtest Du dieses Verhalten überhaupt abstellen, ist das nur wegen Code-Blöcken, wo Du wirklich -- hintereinander darstellen musst?

    • jdo sagt:

      Weil ich mich nicht gerne bevormunden lasse und von Software schon gleich 2x nicht ... Ich möchte was ich hin schreibe auch genau so lesen - vor allen Dingen bei Code-Blöcken.

      • Rayman sagt:

        Das kann ich nachvollziehen. Dennoch würde ich mich freuen, wenn in Deinen Texten weiterhin typografische Details nicht zu kurz kommen würden. Dazu gehören auch Gedankenstriche (hier in Form von Halbgeviertstrichen) und saubere typografische Anführungszeichen („“ ‚‘ “” ‘’). Ich bin ein Typo-Nerd …

        Ansonsten weiter so mit Deinen tollen Berichten. Danke!

        • jdo sagt:

          Also bevor potentiell falsche Code-Schnippsel in einem technisch orientiertem Blog stehen, opfere ich lieber die eigentlichen richtigen Striche, die allerdings an relevanter Stelle vielleicht falsch sind.

          • Rayman sagt:

            Das ist auch gar nicht nötig. Das schöne an Linux ist auch, dass die wichtigsten Unicode-Sonderzeichen schnell und direkt über die Standardtastatur erreichbar sind. Das heißt, Du kannst ruhig die WordPress-Bevormundung ausstellen und weiterhin die richtigen Zeichen setzen ;-).

            Hier mal die Vorgehensweise:

            AltGR (links nach rechts, oben nach unten):
            ′¹²³¼½¬{[]}\@ł€¶ŧ←↓→øþſðđŋħłæſðđŋħł|»«¢„“”µ·…–

            AltGR + Umschalt (links nach rechts, oben nach unten):
            ″¡⅛£¤⅜⅝⅞™±°¿Ł€®Ŧ¥↑ıØÞẞЪŊĦŁẞЪŊĦŁ›‹©‚‘’º×÷—

Antworten