wptexturize() in WordPress
Was es macht
wptexturize() ist eine WordPress-Kernfunktion (in wp-includes/formatting.php), die einfache, "dumme" Zeichen in typografisch korrekte Sonderzeichen umwandelt – ähnlich dem "Smart Quotes"-Feature aus Textverarbeitungsprogrammen.
Konkret ersetzt sie unter anderem:
| Eingabe | Ausgabe | Bezeichnung |
|---|---|---|
' (gerades Anführungszeichen) |
‘ / ’ |
typografische Apostrophe/Anführungszeichen |
" |
“ / ” |
typografische doppelte Anführungszeichen |
-- |
– |
En-Dash |
--- |
— |
Em-Dash |
... |
… |
Ellipse (Auslassungspunkte) |
(c) |
© |
Copyright-Zeichen |
(r) |
® |
Registered-Trademark-Zeichen |
(tm) |
™ |
Trademark-Zeichen |
1/4, 1/2 usw. |
¼, ½ |
Bruchzahlen (teilweise) |
| mehrere Bindestriche | entsprechende Gedankenstriche |
Zusätzlich schützt die Funktion bestimmte Bereiche vor der Umwandlung – z. B. Inhalte in <pre>, <code>, <script>, <style>-Tags sowie Shortcodes, damit dort keine ungewollten Zeichenersetzungen passieren.
Wo wird sie angewendet?
Standardmäßig hängt WordPress wptexturize() per Filter an mehrere Ausgabepunkte:
the_contentthe_titlethe_excerpt- Kommentartexte
- Widget-Texte
- u. v. m.
Das läuft über den content_filters-Mechanismus, meist mit Priorität 10.
Kann man das steuern?
Ja, auf mehreren Ebenen:
1. Komplett deaktivieren
Für einen bestimmten Filter (z. B. Content) den Hook entfernen:
remove_filter( 'the_content', 'wptexturize' );
remove_filter( 'the_title', 'wptexturize' );
remove_filter( 'the_excerpt', 'wptexturize' );
Das muss nach der Filterregistrierung laufen, z. B. im init-Hook oder später:
add_action( 'init', function() {
remove_filter( 'the_content', 'wptexturize' );
} );
2. Über den run_wptexturize-Filter global steuern
WordPress bietet einen dedizierten Filter, um die Funktion an- oder abzuschalten:
add_filter( 'run_wptexturize', '__return_false' );
⚠️ Das deaktiviert die Funktion global für alle Aufrufe.
3. Ergebnis nachträglich anpassen
Über den Filter wptexturize_output lässt sich das Ergebnis nachbearbeiten – etwa um bestimmte Ersetzungen wieder zurückzudrehen:
add_filter( 'wptexturize_output', function( $output ) {
// eigene Logik, z. B. bestimmte Ersetzungen rückgängig machen
return $output;
} );
4. Für bestimmte Inhalte gezielt umgehen
Innerhalb von Content kann man Bereiche mit <code>, <pre> oder <script>/<style>-Tags schützen – dort greift wptexturize() ohnehin nicht.
5. Direkt im Theme/Plugin aufrufen oder umgehen
Man kann die Funktion auch manuell aufrufen:
echo wptexturize( $custom_text );
…falls man sie gezielt nur an einer Stelle nutzen möchte, ohne die globalen Hooks zu berühren.
Praktischer Tipp
Häufigster Anwendungsfall für das Deaktivieren: Wenn eigener Code, Shortcodes oder JSON-Ausgaben im Content stehen und durch die Zeichenersetzung (v. a. Anführungszeichen) kaputtgehen. Dann ist Variante 1 (gezieltes remove_filter) meist die sauberste Lösung, da sie andere Bereiche unangetastet lässt.
Falls du willst, kann ich dir auch zeigen, wie man das nur für einen bestimmten Post-Typ oder Block steuert – sag einfach Bescheid! 🙂