Wordpress-Slug-Problem mit nicht-lateinischen Zeichen

7

Ich verwende Permalinks in WP als: domain.com/category/post_name

Das Problem ist, dass Postnamen nicht-lateinische Zeichen wie Chinesisch, Hebräisch und Arabisch haben . Es codiert sie also zu etwas wie: %20%18%6b%20Daher zählt es das Zeichen jedes Symbols als tatsächliches Zeichen und endet mit einer dreifach längeren Länge, als es einige sehr kurze Schnecken abschneidet.

Wie kann man das beheben? Oder wie kann man zumindest die Längenbegrenzung verlängern? Ich habe versucht, die Länge des Datenbankfelds "post_name" von 200 auf 500 zu verlängern, aber es wird immer noch kurz abgeschnitten.

Ryan
quelle
Vielleicht kann dieses Plugin als Ausgangspunkt zur Lösung des Problems nützlich sein: wordpress.org/extend/plugins/mzslugs-translator - Ich poste dies nicht als Antwort, da ich den Code nicht getestet oder analysiert habe (zumindest nicht) ein altes Plugin).
Brasofilo
1
Welche Version von WordPress haben Sie verwendet und was haben Sie auf Ihrem htaccess. Die 2-Byte-Zeichen-Permalinks sollten spätestens einwandfrei funktionieren.
Sean Lee
1
Stellen Sie sicher, dass Ihr Server, Ihr PHP und Ihre Datenbank für die Verwendung der UTF8-Codierung konfiguriert sind.
Steve Buzonas

Antworten:

8

Permalinks wie http://example/שָׁלוֹםfunktionieren tatsächlich in meinem WordPress 3.3. Könnten die Verbesserungen von remove_accents () für i18n-Permalinks sein .

Wie Sean & Steve bemerkten,

  • Stellen Sie sicher, dass Sie WordPress ≥ 3.3 verwenden
  • Stellen Sie sicher, dass Ihre .htaccess-Datei eine ähnliche Regel enthält wie RewriteRule . /index.php [L]
  • Überprüfen Sie, ob Ihre Datenbank UTF-8-codiert ist (und ziehen Sie gegebenenfalls eine Konvertierung in UTF-8 in Betracht ).

[Meine ursprüngliche Antwort folgt, jetzt nicht so relevant, aber vielleicht immer noch nützlich:]

Sehen

Wenn Ihre Post-Titel einige ASCII-Zeichen enthalten, können Sie beim Generieren von Post-Slugs Nicht-ASCII-Zeichen entfernen .

Einige Plugins können helfen:

  • http://wordpress.org/extend/plugins/strings-sanitizer/

    Bereinigt Titel aggressiv auf saubere, SEO-freundliche Post-Slugs und Mediendateinamen während des Uploads. Konvertiert häufig akzentuierte UTF-8-Zeichen sowie einige kyrillische, hebräische, spanische und deutsche Sonderzeichen.

  • http://wordpress.org/extend/plugins/universal-slugs/

    […] Wenn Sie zufällig eine Sprache sprechen, die Zeichen verwendet, die nicht im englischen Alphabet enthalten sind, müssen Sie sich entweder mit massiven, seltsam aussehenden Permalinks abfinden oder jede manuell aktualisieren, wenn Sie einen Beitrag oder eine Seite schreiben. […] Das Plugin entfernt auch gebräuchliche Wörter wie "und", "και", "το", "the" usw. aus den URLs, da sie einfach zur URL-Länge beitragen, ohne der Bedeutung oder dem etwas hinzuzufügen SEO Wert.

  • http://wordpress.org/extend/plugins/pinyin-slug/

    Wenn Sie beispielsweise einen Beitrag mit einem Titel wie dem folgenden veröffentlichen: "Chinese PinYin" Wordpress weist Ihrem Beitrag automatisch einen langen Dateinamen zu, der als Post-Slug bezeichnet wird: /%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3[…] Wenn das chinesische PinYin-Plugin aktiviert ist, wird der Slug für unseren Beispiel-Blog-Beitrag verwendet sieht aus wie das:/zhongwenpinyin

  • http://wordpress.org/extend/plugins/remove-utf-8-from-slug/

    Entfernen Sie alle UTF-8 vom Titel zum Permalink

  • http://wordpress.org/extend/plugins/pinyin-seo/

    Konvertieren Sie chinesische Schriftzeichen in Pinyin Permalinks.

Einige der mehrsprachigen Plugins können Ihre Slugs möglicherweise automatisch ins Englische (und damit nur in Latein) übersetzen, aber ich habe keines davon verwendet, daher bin ich mir nicht sicher.

Sam
quelle
2

Abgesehen von der Desinfektion besteht die einzige Möglichkeit, die Länge des Slugs zu verlängern, darin, den WP-Code zu ändern

in Datei wp-includes/formatting.php:

entsprechend ersetzen 200:

$title = utf8_uri_encode($title, 200);

in Datei: wp-includes/post.phpSuche nach 3 Zeilen mit:

$alt_post_name = substr( $slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";

Das Problem wird Sie bei jedem WP-Update aufspüren

Jacek Kaniuk
quelle