Problemă cu slug-urile Wordpress pentru caractere non-latine

8 mai 2012, 14:51:18
Vizualizări: 30.3K
Voturi: 11

Folosesc permalink-uri în WP în formatul: domain.com/categorie/post_name

Problema este că numele postărilor conțin caractere non-latine precum chinezești, ebraice și arabe. Așadar, acestea sunt encodate în ceva de genul: %20%18%6b%20, prin urmare fiecare simbol este considerat ca un caracter individual, ajungând să fie de 3 ori mai lung, ceea ce duce la truncarea unor slug-uri chiar și foarte scurte.

Cum pot rezolva această problemă? Sau cel puțin cum pot extinde limita de lungime? Am încercat să extind lungimea câmpului "post_name" din baza de date de la 200 la 500, dar tot se trunchiază.

3
Comentarii

Poate acest plugin poate fi util ca punct de plecare pentru a rezolva problema: http://wordpress.org/extend/plugins/mzslugs-translator/ - Nu postez acest lucru ca răspuns deoarece nu l-am testat sau analizat codul (cel puțin nu este un plugin vechi).

brasofilo brasofilo
10 mai 2012 20:26:53

ce versiune de WordPress ai folosit și ce ai în htaccess. Legăturile permanente cu caractere pe 2 octeți ar trebui să funcționeze perfect pe ultima versiune.

Sean Lee Sean Lee
12 mai 2012 01:04:54

Asigură-te că serverul tău, PHP și baza de date sunt configurate să folosească codificarea UTF8.

Steve Buzonas Steve Buzonas
14 mai 2012 10:14:18
Toate răspunsurile la întrebare 2
0
11

Permalink-uri precum http://example/שָׁלוֹם funcționează de fapt în WordPress 3.3. Poate fi datorită îmbunătățirilor funcției remove_accents() pentru permalink-uri internaționale.

După cum au observat Sean & Steve,

  • asigură-te că folosești WordPress ≥ 3.3
  • verifică că fișierul .htaccess conține o regulă similară cu RewriteRule . /index.php [L]
  • verifică că baza ta de date este codificată în UTF-8 (și ia în considerare conversia la UTF-8 dacă nu este).

[Răspunsul meu original urmează, nu este chiar atât de relevant acum, dar poate fi încă util:]

Vezi

Dacă titlurile postărilor tale conțin caractere non-ASCII, poți elimina caracterele non-ASCII la generarea slug-urilor pentru postări.

Câteva plugin-uri care pot ajuta:

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

    Sanitizează agresiv titlurile pentru a obține slug-uri de postări curate, prietenoase pentru SEO, și nume de fișiere media la încărcare. Funcționează prin conversia caracterelor UTF-8 accentuate comune, precum și a câtorva caractere speciale chirilice, ebraice, spaniole și germane.

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

    [...] dacă vorbești o limbă care folosește caractere care nu sunt incluse în alfabetul englezesc, atunci fie trebuie să accepti permalink-uri lungi și ciudate, fie să le actualizezi manual de fiecare dată când scrii o postare sau o pagină. [...] Plugin-ul va elimina, de asemenea, cuvinte comune precum "și", "και", "το", "the" etc. din URL-uri, deoarece acestea doar contribuie la lungimea URL-ului fără a adăuga nimic la semnificație sau valoare SEO.

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

    De exemplu, când publici o postare cu un titlu precum: "Chinese PinYin", WordPress atribuie automat un nume lung postării, numit slug: /%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3 [...] Cu plugin-ul Chinese PinYin activat, slug-ul pentru exemplul nostru ar arăta astfel: /zhongwenpinyin

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

    elimină toate caracterele UTF-8 din titlu pentru permalink

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

    Convertește caracterele chinezești în permalink-uri Pinyin.

De asemenea, unele plugin-uri multilingve ar putea să traduci automat slug-urile în engleză (și, prin urmare, în caractere latine), dar nu am folosit niciunul, așa că nu sunt sigur.

10 mai 2012 23:04:39
1

Pe lângă sanitizare, singura modalitate de a prelungi lungimea slug-ului este prin modificarea codului WP

în fișierul wp-includes/formatting.php:

înlocuiți 200 după cum este necesar:

$title = utf8_uri_encode($title, 200);

în fișierul: wp-includes/post.php căutați cele 3 linii cu:

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

Problema vă va urmări la fiecare actualizare a WP

10 mai 2012 23:42:44
Comentarii

Da, deși această soluție "repară" problema, nu este niciodată o idee bună să recomanzi modificări ale fișierelor Core, deoarece majoritatea utilizatorilor WordPress nu înțeleg cum sunt înlocuite fișierele în timpul actualizărilor.

Q Studio Q Studio
30 dec. 2020 11:10:17