Ich habe gestern einen kleinen Bug oder Feature – Frage des Standpunktes – in WordPress entdeckt. Und zwar im Zusammenhang mit Conditional Tags und Gedankenstrichen.

Ich hatte gestern bei einer Seite eines Kunden einen Titel, der einen Gedankenstrich beinhaltete. Hier ein Beispiel: Bla bla – blubb blubb. Aktiviert man sprechende Permalinks, dann „übersetzt“ WordPress dies in bla-bla---blubb-blubb. An sich nicht falsch, der Gedankenstrich wird in einen einfachen Bindestrich (oder korrekter ausgedrückt Bindestrich-Minus) umgewandelt.

Wenn ich jetzt allerdings eine einfache Abfrage mache:

<?php if (is_page('bla-bla---blubb-blubb')) {...} ?>

dann wird das ignoriert. Erst als ich den Permalink auf bla-bla-blubb-blubb geändert und die entsprechende Abfrage im Code:

<?php if (is_page('bla-bla-blubb-blubb')) {...} ?>

angepasst habe, hat der Conditional Tag funktioniert. So wie es ausschaut, vertragen Conditional Tags nicht zu viele Bindestriche. Alternativ kann man hier anstatt auf den Permalink-Namen auf die ID der Page oder des Artikels zurückgreifen.

Divi: Premium-Theme für WordPress
Werbung

Geschrieben von Vladimir

Vladimir Simović, arbeitet seit 2000 mit HTML & CSS und seit Januar 2004 mit WordPress. Im Laufe der Jahre hat er diverse Fachbücher und Fachartikel publiziert.

  1. Hmm.. merkwürdig … was genau ist nochmal die Einstellung für „sprechende“ Permalinks?

    Bei mir ist eingestellt (englisch!) „Day and Name“, was so etwas erzeugt:

    …/2010/10/14/kein-inhalt-kein-abo/

    Mein WP (3.0.1) ersetzt hier den Gedankenstrich mit einem einfachen Bindestrich (zwischen „inhalt“ und „kein“), was ja völlig in Ordnung ist.

    Drei Bindestriche als Ersetzung hatte ich dagegen bisher noch nicht.

    1. @Boris,

      als Einstellung hatte ich in deutschem Blog die Einstellung Monat und Name.

  2. Könnte auch sein, dass ein Plugin für die deutsche Sprache aktiv ist und dies erstellt? Bei mir wird im test dies als Permalink kreiert: /bla-bla-blubb-blubb/. Dies passiert im Standard oder diesem Plugin für die deutsche Sprache.

    1. @Frank,

      ich habe das jetzt auch hier noch einmal auf perun. net getestet, mit der deutschen Sprachdatei und German Permalinks bekomme ich das gleiche Ergebnis wie du. Beim Kunden ist weder German Permalinks noch ein anderes „Entschärfungsplugin“ aktiviert.

  3. Bei mir ist es ähnlich: /bla-bla-–-blubb-blubb/
    mit
    deutscher Sprachdatei.

  4. @Perunf und Steffen: eventuell irgendwas aktiv, was auf den Filter sanitize_title zugreift?

  5. Aus diesem Grund gibt es Slugs – und diese sollten keine Leerzeichen beinhalten. Hat an und für sich nichts mit den Bindestrichen zu tun.

    1. @Daniel S,

      wo siehst du im Artikel einen Leerezeichen im Slug bzw. in der URL?

  6. Ich passe die Permalinks eh meist noch an (jedenfalls habe ich das im alten Blog meist so gemacht) 🙂

  7. Das ist natürlich ein Problem das man in der Programmierung häufiger antrifft. Das Minuszeichen wird als Trennzeichen verwendet, der Bindestrich in ein Minuszeichen umgewandelt. Somit hat das Minuszeichen eine Doppelbedeutung. Das ist in etwa so, als würde man in einem Text alle Konsonanten in Minuszeichen umwandeln und dann von einem der den Text nicht kennt verlangen diese Umwandlung rückgängig zu machen. Woher soll WordPress wissen was ein Trennzeichen ist und was früher ein Bindestrich war?

    Das Problem dürfte somit so ziemlich alle Zeichen betreffen die in einer URL nicht darstellbar sind. Entweder sie werden bei der Umwandlung in einen Permalink unterschlagen. Oder sie werden in ein Ersatzzeichen umgewandelt.
    Die Umwandlung in ein Ersatzzeichen hat den Nachteil das man die Umwandlung nicht rückgängig machen kann. Das Unterschlagen hat den Nachteil dass das Zeichen schlichtweg fehlt. Das WordPress sich für das Ersatzzeichen entschieden hat, ist vielleicht Geschmackssache. Das es das Trennzeichen als Ersatzzeichen verwendet, finde ich hingegen etwas suboptimal.

  8. […] Simovic erfahren möchte, sollte mal auf der Amazon Autorenseite vorbeischauen oder seinen Blog […]

Kommentare sind geschlossen.