# 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_content`
- `the_title`
- `the_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:

```php
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:

```php
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:

```php
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:

```php
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:

```php
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! 🙂