Last active 8 months ago

portalzine's Avatar portalzine revised this gist 8 months ago. Go to revision

1 file changed, 31 insertions

translate_slug_umlauts.php(file created)

@@ -0,0 +1,31 @@
1 + add_filter( 'sanitize_title', '_translate_slug_umlauts', 5, 3 );
2 + /**
3 + * Transliterates German umlauts in post slugs for both the classic and block editors.
4 + *
5 + * @param string $title The sanitized title.
6 + * @param string $raw_title The title prior to any sanitization.
7 + * @param string $context The context in which the sanitization is occurring.
8 + *
9 + * @return string The modified title with German umlauts transliterated.
10 + */
11 + function _translate_slug_umlauts( $title, $raw_title = null, $context = 'query' ) {
12 + // Hacky hook due to hacky core, see: http://core.trac.wordpress.org/ticket/16905
13 + if ( $raw_title !== null ) {
14 + $title = $raw_title; // undo remove_accents
15 + }
16 +
17 + // Replace umlauts and special characters with their transliterated equivalents.
18 + $umlaut_replace = [
19 + 'Ä' => 'ae', 'ä' => 'ae',
20 + 'Ö' => 'oe', 'ö' => 'oe',
21 + 'Ü' => 'ue', 'ü' => 'ue',
22 + 'ẞ' => 'ss', 'ß' => 'ss'
23 + ];
24 + $title = strtr( $title, $umlaut_replace );
25 +
26 + if ( $context === 'save' ) {
27 + $title = remove_accents( $title ); // redo remove_accents
28 + }
29 +
30 + return $title;
31 + }
Newer Older