Problema con slugs de WordPress y caracteres no latinos

8 may 2012, 14:51:18
Vistas: 30.3K
Votos: 11

Estoy usando permalinks en WordPress como: domain.com/categoria/nombre_entrada

El problema es que los nombres de las entradas tienen caracteres no latinos como chino, hebreo y árabe. Por lo que los codifica en algo como: %20%18%6b%20 y por lo tanto cuenta cada símbolo codificado como un carácter real, terminando con 3 veces más longitud que termina truncando incluso slugs muy cortos.

¿Cómo se puede arreglar esto? ¿O cómo extender al menos el límite de longitud? He intentado extender la longitud del campo "post_name" en la base de datos de 200 a 500, pero sigue truncándose.

3
Comentarios

Quizás este plugin pueda ser útil como punto de partida para resolver el problema: http://wordpress.org/extend/plugins/mzslugs-translator/ - No lo publico como respuesta porque no lo he probado ni analizado el código (al menos no es un plugin antiguo).

brasofilo brasofilo
10 may 2012 20:26:53

¿Qué versión de WordPress usaste y qué tienes en tu htaccess? Los permalinks con caracteres de 2 bytes deberían funcionar bien en la versión más reciente.

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

Asegúrate de que tu servidor, php y base de datos estén configurados para usar codificación UTF8.

Steve Buzonas Steve Buzonas
14 may 2012 10:14:18
Todas las respuestas a la pregunta 2
0
11

Los enlaces permanentes como http://example/שָׁלוֹם realmente funcionan en mi WordPress 3.3. Podría deberse a las mejoras en remove_accents() para enlaces permanentes i18n.

Como señalaron Sean & Steve,

  • asegúrate de que estás usando WordPress ≥ 3.3
  • verifica que tu archivo .htaccess contenga una regla similar a RewriteRule . /index.php [L]
  • comprueba que tu base de datos esté codificada en UTF-8 (y considera convertirla a UTF-8 si no lo está).

[Mi respuesta original continúa, no tan relevante ahora pero quizás aún útil:]

Consulta

Si tus títulos de publicaciones contienen algunos caracteres ASCII, puedes eliminar caracteres no ASCII al generar slugs de publicaciones.

Algunos plugins pueden ayudar:

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

    Sanitiza agresivamente los títulos para obtener slugs de publicaciones limpios y amigables para SEO, así como nombres de archivos de medios durante la carga. Funciona convirtiendo caracteres UTF-8 acentuados comunes, así como algunos caracteres especiales cirílicos, hebreos, españoles y alemanes.

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

    [...] si hablas un idioma que utiliza caracteres que no están incluidos en el alfabeto inglés, entonces tienes que soportar enlaces permanentes masivos y de aspecto extraño, o actualizarlos manualmente cada vez que escribas una publicación o página. [...] El plugin también eliminará palabras comunes como "y", "και", "το", "the", etc. de las URLs, ya que simplemente contribuyen a la longitud de la URL sin añadir nada al significado o al valor SEO.

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

    Por ejemplo, cuando publicas una entrada con un título como este: "Pinyin chino", Wordpress asigna automáticamente un nombre de archivo largo a tu publicación, llamado slug: /%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3 [...] Con el plugin Chinese PinYin activado, el slug para nuestra entrada de blog de ejemplo se vería así: /zhongwenpinyin

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

    elimina todo UTF-8 del título al enlace permanente

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

    Convierte caracteres chinos a enlaces permanentes en Pinyin.

Además, algunos de los plugins multilingües podrían traducir automáticamente tus slugs al inglés (y por lo tanto a caracteres solo latinos), pero no he usado ninguno de ellos, así que no estoy seguro.

10 may 2012 23:04:39
1

Además de sanitizar, la única forma de extender la longitud del slug es modificando el código de WP

en el archivo wp-includes/formatting.php:

reemplaza 200 según corresponda:

$title = utf8_uri_encode($title, 200);

en el archivo: wp-includes/post.php busca las 3 líneas con:

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

El problema te perseguirá con cada actualización de WP

10 may 2012 23:42:44
Comentarios

Sí, aunque esta mezcla "soluciona" el problema, nunca es una buena idea recomendar cambios en el Core, ya que la mayoría de usuarios de WP no entienden cómo se reemplazan los archivos durante las actualizaciones.

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