Локализация скина и изменения в добавлении меню

Сделал первую версию локализации скина Vistered Little, ещё стоит проверить орфографию и смысловые моменты, но текущую версию перевода можно скачать по этой ссылке.

В процессе локализации скина и освоения движка Wordpress наткнулся на такой неприятный момент, как добавление кирилической Рубрики (категории) через “быстрое меню” при создании записи.
Причём удивило то, что добавление в меню “Управление > Рубрики” проходило нормально.

Исследование кода позволило побороть этот недуг, а решением я хочу поделиться с вами.

Изменению подверглись два файла edit-form-ajax-cat.php и admin-db.php

Как выяснилось, вся проблема заключалась в особенности передачи данных в AJAX, а точнее то, что все переменные передаются по умолчанию в кодировке UTF-8. Проблема естественно актуальна только для пользователей Win-1251 версии Wordpress, коим я и являюсь. Чтобы побороть этои недуг, воспользуемся самым простым способом - переконвертируем уже переданную переменную в нужную нам кодировку, для этого в edit-form-ajax-cat.php ищем строку

$cat_name = trim( $cat_name );

и заменяем её на

$cat_name = trim( iconv('UTF-8', 'windows-1251',$cat_name ));
*Информация по функции iconv*

В принципе это решает проблему и уже можно вносить категории через “быстрое меню”, но вот при ближайшем рассмотрении выясняется, что пункт “Синоним рубрики” продолжает коверкаться, даже при добавлении/изменении его в разделе “Управление > Рубрики”.

Просмотрев в общих чертах файл admin-db.php, пришёл к выводу, что проблема заключается в том, что к переменной $category_nicename применяется конвертация, в следствии чего кириллические символы заменяются на utf-8.

Вот как я решил данную проблему. В файле admin-db.php ищем следующий текст

if (empty ($category_nicename))

$category_nicename = sanitize_title($cat_name);

else
$category_nicename = sanitize_title($category_nicename);
$category_nicename = apply_filters('pre_category_nicename', $category_nicename);

и заменяем на

if (empty ($category_nicename))
$category_nicename = $cat_name;
else
$category_nicename = $category_nicename;

В том же файле заменяем

if ( $category_nicename == '' ) {
$category_nicename = sanitize_title($cat_name, $cat_ID );

на

if ( $category_nicename == '' ) {
$category_nicename = $cat_name;

Если вам не досуг искать и править файлы, то можете скачать уже отредактированные версии и просто заменить у себя на сервере на файлы из архива.

Ссылка на архив с файлами.

Следует помнить, что все изменения проводились над локализованной версией от Максима в Windows-1251 кодировке и может не “помочь” в других случаях.

Возможно существует более универсальный способ проверки на соответствие необходимой кодировке, но сие требует более глубокого изучения структуры wordpress. Есть куда стремится, как говориться.

Из той же оперы, так что прочти обязательно:

Один комментарий на “Локализация скина и изменения в добавлении меню”

  1. Сергей пишет:

    Эх, раньше бы найти эту статью, а то я, устав искать в чем дело, переделал все на UTF-8. Кучу сил времени потратил зря.

Оставить комментарий

Вы должны войти чтобы оставить комментарий.