Problema dello slug di Wordpress con caratteri non latini
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.
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
- http://queryposts.com/function/sanitize_title/
- http://queryposts.com/function/remove_accents/
- http://queryposts.com/function/esc_url/
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.

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
