Nachtrag zum doppelten Minus-Problem von WordPress – andere Lösung

3 Kommentare Autor: Jürgen (jdo)

Ich wurde darauf hingewiesen, dass mit meinem Ansatz die doppelten Minus-Zeichen zu unterbinden die Typografie leiden könnte. Das ist auch nicht ideal und deswegen habe ich noch mal genauer nachgesehen.

Ich benutze für das Code-Highlighting ein recht altes Plugin: Dean’s Code Highlighter. Es basiert auf Geshi und funktioniert nach wie vor – auch wenn es schon seit zwei Jahren kein Update mehr gegeben hat.

Die Syntax davon ist einfach. Man nimmt ein <pre lang=”php”> code code code</pre> und dann wird der Code schön farbig dargestellt. Für etwas anderes verwende ich <pre> so oder so nicht. Bei <pre> würden die doppelten Minuszeichen oder andere Zeichen auch nicht umgewandelt. Das Problem ist nur, dass Dean’s Code Highlighter das <pre lang=…> in <div> <ol> und <li> wandelt.

Ich wusste das bisher nicht und nun könnte man natürlich einfach künftig das <pre lang=…> in <code> einpacken. Ich will aber nicht alle meine Beiträge nach solchen Code-Schnipsseln durchstöbern und lassen <pre> einfach durch <code><pre> ersetzen (functions.php).

add_filter( 'the_content' , 'mh_un_en_dash' , 1 );
function mh_un_en_dash( $content ) {
$old_stuff = array("<pre lang", "<pre>", "</pre>");
$new_stuff = array("<code><pre lang", "<code><pre>", "</pre></code>");
$content = str_replace($old_stuff, $new_stuff, $content);
return $content;
}

Ein Problem könnte noch sein, dass Dean’s Code Highlighter sehr früh aufgerufen wird.

add_filter('the_content',array(&$this, 'ch_the_content_filter'),1);

das lassen wir einfach etwas später durchlaufen:

add_filter('the_content',array(&$this, 'ch_the_content_filter'),10);

Hmmm Moment mal … wenn der Filter von Dean’s Code Highlighter später läuft, wird das <pre> vielleicht sogar in Ruhe gelassen. Genau so ist es. Das Problem war, dass der Code Highlighter zu früh umgewandelt hat und deswegen die doppelten Minus-Zeichen verschwanden. Somit kann ich mir den Filter am Anfang des Beitrags komplett sparen. Die Abwandlung von der 1 in eine 50 hat mein spezielles Problem aber nur fast gelöst.

Nun wurde allerdings aus dem & ein &amp; … es ist zum Haare raufen … auch das lässt sich im Plugin selbst lösen. Die Zeilen:

$text = str_replace('&lt;', '<', $text);
$text = str_replace('&gt;', '>', $text);

wurde um das hier ergänzt …

$text = str_replace('&amp;', '&', $text);

Das war es nun – hoffe ich und künftig verhalten sich die Code-Blöcke, wie sie sollen. Diese Konstellation läuft nun aktuell und ich sehe mal, wie weit ich damit komme. So langsam aber sicher trägt mein hauseigener WordPress-Frühjahrsputz Früchte …




 Alle Kommentare als Feed abonnieren

3 Kommentare zu “Nachtrag zum doppelten Minus-Problem von WordPress – andere Lösung”

  1. Struppi says:

    Wie gesagt ich finde, dass wäre in einem Plugin besser aufgehoben, das das keine Funktion des Template ist.

    und soweit ich das sehe, hätte eventuell:

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

    die meisten deiner Probleme auf einen Schlag gelöst.

    • jdo says:

      Ich packe es irgendwann in ein Plugin, aber so lange ich damit experimentiere ...

      Mein Problem ist dieser Code-Highlighter. Deaktivere ich diesen, habe ich eigentlich gar kein Problem. Ich will ihn aber nicht deaktivieren, weil das einfach schöner und übersichtlicher ist.

      Das mit den convert_chars hatte ich ausprobiert, hat aber nichts gebracht, weil der Highlighter an sich auch Zeichen umwandelt.

      Es ist wohl ein sehr spezielles Problem in meinem Fall.

  2. Stephan says:

    so jetzt nochmal als Code damit man das auch versteht 🙂

    Hallo,
    ich bekomme das mit dem highlighter nicht ganz hin. Wenn ich im Texteditor schreibe:
    1. ">" wirds im visuell wieder umgewandelt in ">"
    2. ">" wird umgewandelt in ">"
    3. "
    >" wird umgewandelt in ">"

    gibts da irgendein trick wie ich die umwandlung umgehen kann? ich will das ">" 1zu1 dargesellt wird ohne sonstige zeichen.

    Vielen dank

    gruß stephan

    PS:
    habe auch deine Lösung aus einem anderen Beitrag mit der erweiterung der Functions.php versucht. auch das leider ohne erfolg 🙁
    habe ">", ">", ">" in dem array ergänzt um ">" zu bekommen leider kommt immer noch ">" raus......

    function mh_un_en_dash( $content ) {
    $old_stuff = array("–", "—", "‘", "’", ">", ">", ">");
    $new_stuff = array("--", "-", "'", "'", ">", ">", ">");
    $content = str_replace($old_stuff, $new_stuff, $content);
    return $content;
    }