Problema dello slug di Wordpress con caratteri non latini

8 mag 2012, 14:51:18
Visualizzazioni: 30.3K
Voti: 11

Sto utilizzando i permalink in WP come: domain.com/category/post_name

Il problema è che i nomi dei post hanno caratteri non latini come cinese, ebraico e arabo. Quindi li codifica in qualcosa del tipo: %20%18%6b%20 e di conseguenza conta ogni simbolo del carattere come un carattere effettivo, finendo per avere una lunghezza 3 volte maggiore che tronca anche alcuni slug molto corti.

Come si può risolvere? O almeno come estendere il limite di lunghezza? Ho provato ad estendere la lunghezza del campo del database "post_name" da 200 a 500, ma continua comunque a troncare.

3
Commenti

Forse questo plugin potrebbe essere utile come punto di partenza per risolvere il problema: http://wordpress.org/extend/plugins/mzslugs-translator/ - Non lo posto come risposta perché non ho testato o analizzato il codice (almeno non è un plugin vecchio).

brasofilo brasofilo
10 mag 2012 20:26:53

Che versione di WordPress hai utilizzato e cosa hai nel tuo htaccess. I permalink con caratteri a 2 byte dovrebbero funzionare perfettamente nell'ultima versione.

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

Assicurati che il tuo server, php e database siano tutti configurati per utilizzare la codifica UTF8.

Steve Buzonas Steve Buzonas
14 mag 2012 10:14:18
Tutte le risposte alla domanda 2
0
11

Permalink come http://example/שָׁלוֹם funzionano effettivamente nel mio WordPress 3.3. Potrebbe essere grazie ai miglioramenti di remove_accents() per i permalink i18n.

Come notato da Sean & Steve,

  • assicurati di utilizzare WordPress ≥ 3.3
  • assicurati che il tuo file .htaccess contenga una regola simile a RewriteRule . /index.php [L]
  • verifica che il tuo database sia codificato in UTF-8 (e considera la conversione a UTF-8 se non lo è).

[La mia risposta originale segue, non così rilevante ora ma forse ancora utile:]

Vedi

Se i tuoi titoli contengono alcuni caratteri ASCII, puoi rimuovere i caratteri non ASCII durante la generazione degli slug dei post.

Alcuni plugin potrebbero aiutare:

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

    Sanifica in modo aggressivo i titoli per ottenere slug di post puliti e SEO-friendly, così come i nomi dei file multimediali durante il caricamento. Funziona convertendo i comuni caratteri UTF-8 accentati, oltre a qualche carattere speciale cirillico, ebraico, spagnolo e tedesco.

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

    [...] se parli una lingua che utilizza caratteri non inclusi nell'alfabeto inglese, allora devi sopportare permalink enormi e dall'aspetto strano, oppure aggiornarli manualmente ogni volta che scrivi un post o una pagina. [...] Il plugin rimuoverà anche parole comuni come "e", "και", "το", "the" ecc. dagli URL, in quanto contribuiscono solo alla lunghezza dell'URL senza aggiungere nulla al significato o al valore SEO.

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

    Ad esempio, quando pubblichi un post con un titolo come questo: "Chinese PinYin" WordPress assegna automaticamente un nome file lungo al tuo post, chiamato slug del post: /%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3 [...] Con il plugin Chinese PinYin attivato, lo slug per il nostro post di esempio sarebbe così: /zhongwenpinyin

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

    rimuove tutti i caratteri UTF-8 dal titolo al permalink

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

    Converte i caratteri cinesi in permalink Pinyin.

Inoltre, alcuni dei plugin multilingue potrebbero essere in grado di tradurre automaticamente i tuoi slug in inglese (e quindi in caratteri solo latini), ma non ho usato nessuno di loro, quindi non ne sono sicuro.

10 mag 2012 23:04:39
1

Oltre alla sanificazione, l'unico modo per estendere la lunghezza dello slug è modificare il codice di WordPress

nel file wp-includes/formatting.php:

sostituisci 200 con il valore desiderato:

$title = utf8_uri_encode($title, 200);

nel file: wp-includes/post.php cerca le 3 righe con:

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

Il problema si ripresenterà ad ogni aggiornamento di WordPress

10 mag 2012 23:42:44
Commenti

Sì, anche se questa soluzione "risolve" il problema, non è mai una buona idea consigliare modifiche al Core, poiché la maggior parte degli utenti di WP non capisce come i file vengono sostituiti durante gli aggiornamenti.

Q Studio Q Studio
30 dic 2020 11:10:17