Update 19.08.2015 – Frohe Botschaft: WordPress macht es nun richtig!
So wie es aussieht, besteht das Problem mit den falschen Anführungszeichen in deutschsprachigen WordPress-Installationen seit der Version 4.2.3 nicht mehr. Insofern verliert dieser Beitrag seinen Sinn, was ich aufgrund der Resonanz auf diesen Beitrag etwas schade finden könnte. Aber: Besser ist es natürlich ohne Workaround. Es funktioniert nun einfach so in WordPress – mich freut´s!
Die Datei formatting.php wurde überarbeitet. Man kann sehen, dass mit dieser Überarbeitung die Voraussetzung für die Übersetzung geschaffen wurde*:
Unter /wp-content/languages im Sprachfile finden sich nun die Übersetzungen der Anführungszeichen:
Damit ist dieser Fall sauber gelöst: Die originale Übersetzungsdatei von WordPress liefert mit der deutschen Spracheinstellung die korrekten Zeichen. Z.B. in der WordPress-Version 4.2.1 waren die Zeichen noch nicht übersetzt:
* Hinweis: Wenn ich den Code der alten formatting.php anschaue und ihn mit dem der neuen vergleiche: War der einzige Grund für die falschen Anführungszeichen eigentlich immer nur die falsche Übersetzung??
Grundsätzlich war ja die Voraussetzung im Code mit “_x” bereits gegeben … :
/* translators: opening curly double quote */
$opening_quote = _x( '“', 'opening curly double quote' );
Hier folgt der ursprüngliche Beginn des Artikels –
als er noch eine Existenzberechtigung hatte:
Bei den Grundeinstellungen von WordPress tritt für deutsche Blogger leider das Problem auf, dass die englischen Anführungszeichen statt der deutschen angezeigt werden. Das sieht dann so aus:
”englische Variante“ statt “deutsche Variante” bzw. ‘deutsche Variante’
Um dauerhaft eine deutsche Darstellung zu erhalten brauchen wir die Datei formatting.php aus dem Verzeichnis wp-includes. Man muss im Code unter dem Abschnitt function wptexturize($text) lediglich an ein paar Stellen des Zeichencodes austauschen (siehe Abbildung):
function wptexturize($text) { global $wp_cockneyreplace; static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements, $default_no_texturize_tags, $default_no_texturize_shortcodes; // No need to set up these static variables more than once if ( ! isset( $static_characters ) ) { /* translators: opening curly double quote */ $opening_quote = _x( '„', 'opening curly double quote' ); /* translators: closing curly double quote */ $closing_quote = _x( '“', 'closing curly double quote' ); /* translators: apostrophe, for example in 'cause or can't */ $apos = _x( '’', 'apostrophe' ); /* translators: prime, for example in 9' (nine feet) */ $prime = _x( '′', 'prime' ); /* translators: double prime, for example in 9" (nine inches) */ $double_prime = _x( '″', 'double prime' ); /* translators: opening curly single quote */ $opening_single_quote = _x( '‚', 'opening curly single quote' ); /* translators: closing curly single quote */ $closing_single_quote = _x( '‘', 'closing curly single quote' ); /* translators: en dash */ $en_dash = _x( '–', 'en dash' ); /* translators: em dash */ $em_dash = _x( '—', 'em dash' ); $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt'); $default_no_texturize_shortcodes = array('code');
Hier wurden die folgenden Zeichencodes ersetzt:
“ ersetzt durch „
” ersetzt durch “
‘ ersetzt durch ‚
’ ersetzt durch ‘
Durch diese Vorgehensweise erhält man eine saubere typographische Darstellung.
Wichtig: unbedingt eine Sicherungskopie der Datei formatting.php vor den Änderungen anfertigen.
Update (29.03.2015) – neue Lösung für dauerhaft geänderte Anführungszeichen:
Wer in seiner WordPress-Installation ein Child-Theme benutzt, kann dort in der functions.php folgenden Code einfügen, um die deutschen Anführungszeichen zu erzeugen:
<?php add_filter( 'the_content' , 'themename_special_replacements' , 12); add_filter( 'the_title', 'themename_special_replacements', 12 ); add_filter( 'the_title_rss', 'themename_special_replacements', 12 ); add_filter( 'the_content_feed', 'themename_special_replacements', 12 ); function themename_special_replacements( $text ) { $text = str_replace( '“' , '„' , $text ); $text = str_replace( '”' , '“' , $text ); $text = str_replace( '‘' , '‚' , $text ); $text = str_replace( '’' , '‘' , $text ); return $text; } ?>
Dadurch wird es bei künftigen WordPress-Updates unnötig, die formatting.php jedes Mal anzupassen bzw. zu überschreiben, um saubere deutsche Anführungszeichen in WordPress zu erhalten. Natürlich kann alles auch in ein Plugin verpackt werden.
Hallo, danke für die Funktion. Sie spart ein Performance-fressendes Plugin. Allerdings macht der Code des Updates seinen Job nur zur Hälfte. Um das schließende doppelte Anführungszeichen zu ersetzen, muss wie oben schon beschrieben ” durch “ ersetzt werden.
Stimmt, da war ich etwas zu schludrig. Ich habe den Code oben angepasst und gleich noch die einfachen Anführungszeichen mit berücksichtigt. Vielen Dank für den Hinweis.
add_filter( ‘the_content’ , ‘themename_special_replacements’ , 12);
add_filter( ‘the_title’, ‘themename_special_replacements’, 12 );·
add_filter( ‘the_title_rss’, ‘themename_special_replacements’, 12 );·
add_filter( ‘the_content_feed’, ‘themename_special_replacements’, 12 );·
Vor allem vielen Dank für die Ergänzung und Auslagerung ins Theme. So ist das ganze sehr “rund”!
Na, gut dass du den Beitrag hast stehen lassen, für mich war das auch 2018 eine „runde“ Information. Perfekt.
Ulrike