Проблема со слагами WordPress для нелатинских символов
Я использую пермалинки в WordPress в формате: domain.com/category/post_name
Проблема в том, что названия постов содержат нелатинские символы, такие как китайские, иврит и арабские. В результате они кодируются в формат вида: %20%18%6b%20
, где каждый закодированный символ считается как отдельный символ, что приводит к увеличению длины в 3 раза, из-за чего даже короткие слаги обрезаются.
Как это исправить? Или как хотя бы увеличить лимит длины? Я пытался увеличить длину поля "post_name" в базе данных с 200 до 500, но слаги всё равно обрезаются.

Постоянные ссылки вида http://example/שָׁלוֹם
действительно работают в моем WordPress 3.3. Это может быть связано с улучшениями функции remove_accents() для интернационализации постоянных ссылок.
Как отметили Шон и Стив:
- убедитесь, что используете WordPress версии ≥ 3.3
- убедитесь, что ваш файл .htaccess содержит правило, подобное
RewriteRule . /index.php [L]
- проверьте, что ваша база данных использует кодировку UTF-8 (и рассмотрите возможность перехода на UTF-8, если это не так).
[Мой оригинальный ответ, который сейчас менее актуален, но, возможно, все еще полезен:]
Смотрите:
- http://queryposts.com/function/sanitize_title/
- http://queryposts.com/function/remove_accents/
- http://queryposts.com/function/esc_url/
Если заголовки ваших записей содержат некоторые ASCII-символы, вы можете удалить не-ASCII символы при генерации ярлыков записей.
Некоторые плагины могут помочь:
http://wordpress.org/extend/plugins/strings-sanitizer/
Агрессивно очищает заголовки для создания чистых, SEO-дружественных ярлыков записей и имен файлов при загрузке. Работает путем преобразования распространенных акцентированных символов UTF-8, а также некоторых специальных символов кириллицы, иврита, испанского и немецкого языков.
http://wordpress.org/extend/plugins/universal-slugs/
[...] если вы говорите на языке, который использует символы, не входящие в английский алфавит, то вам приходится мириться с громоздкими, странно выглядящими постоянными ссылками или вручную обновлять каждую из них при создании записи или страницы. [...] Плагин также удаляет из URL-адресов распространенные слова, такие как "and", "και", "το", "the" и т.д., поскольку они лишь увеличивают длину URL, не добавляя ничего к смыслу или SEO-ценности.
http://wordpress.org/extend/plugins/pinyin-slug/
Например, когда вы публикуете запись с заголовком "Chinese PinYin", WordPress автоматически назначает длинное имя файла для вашей записи, называемое ярлыком:
/%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3
[...] С активированным плагином Chinese PinYin, ярлык для нашего примера будет выглядеть так:/zhongwenpinyin
http://wordpress.org/extend/plugins/remove-utf-8-from-slug/
удаляет все UTF-8 символы из заголовка при создании постоянной ссылки
http://wordpress.org/extend/plugins/pinyin-seo/
Преобразует китайские иероглифы в ярлыки на основе пиньиня.
Также, некоторые многоязычные плагины могут автоматически переводить ваши ярлыки на английский (и, следовательно, использовать только латинские символы), но я не использовал ни один из них, поэтому не уверен.

Помимо санитизации, единственный способ увеличить длину слага — это модификация кода WordPress.
В файле wp-includes/formatting.php
:
замените значение 200
на нужное:
$title = utf8_uri_encode($title, 200);
В файле: wp-includes/post.php
найдите 3 строки с:
$alt_post_name = substr( $slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
Проблема будет преследовать вас с каждым обновлением WordPress
