Taxonomy name is more than 28 characters. Исправляем ошибку в Wp All IMport

Ни так давно я очень близко познакомился с плагином Wp all Import, и во время импорт товаров каталога Оазис, обратил внимание на ошибку в логе.
Данная ошибка выглядит вот так: Taxonomy “Совместимость” name is more than 28 characters. Change it, please.
Читал на форумах, что данная ошибка встречается ни только у меня, но решения так и не нашёл, поэтому решил действовать самостоятельно.
Почему возникает данная ошибка?
Во время создания Атрибутов, Wp All Import автоматически создаёт slug, который проходит через функцию urldecode, и в на выходе получается не «Совместимость», а «%d0%a1%d0%be%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%b8%d0%bc%d0%be%d1%81%d1%82%d1%8c», которая значительно больше чем 28 символов. Естественно атрибут добавлен не будет, и вам придётся по новой выполнять импорт товаров, или их обновление.
Чтобы избавиться от данной проблемы необходимо URL Русских атрибутов преобразовать в транслитерацию, но разработчики плагина почему-то не подумали об этом.
Как это сделать?
Первый вариант
Данный вариант значительно проще, но его работоспособность не гарантирую. Устанавливаем плагин Wp Translitera, и пробуем импорт товаров. Если данный способ вам не помог, переходим ко второму варианту.
Второй вариант
В папке /wp-content/plugins/wpai-woocommerce-add-on/libraries/services расположен файл XmlImportWooTaxonomyService.php
После строки $attr_name_real = $prefix > 1 ? $attr_name . » » . $prefix : $attr_name;

Добавляем строчку
$attr_name_real=substr($this->coder($attr_name_real),0,25);
Перед строкой
public function createTaxonomy($attr_name, $prefix = 1) {
Добавляем функция преобразования
function coder($title){
$trans = array(
" " => "-",
"а"=>"a",
"б"=>"b",
"в"=>"v",
"г"=>"g",
"д"=>"d",
"е"=>"e",
"ё"=>"jo",
"ж"=>"zh",
"з"=>"z",
"и"=>"i",
"й"=>"j",
"к"=>"k",
"л"=>"l",
"м"=>"m",
"н"=>"n",
"о"=>"o",
"п"=>"p",
"р"=>"r",
"с"=>"s",
"т"=>"t",
"у"=>"u",
"ф"=>"f",
"х" =>"h",
"ц"=>"c",
"ч"=>"ch",
"ш"=>"sh",
"щ"=>"sh",
"ъ"=>"",
"ы"=>"y",
"ь"=>"",
"э"=>"eh",
"ю"=>"ju",
"я"=>"ja"
);
$title=mb_strtolower( trim($title) );
$url_n = strtr($title, $trans);
$title=$url_n;
$ar=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","-","-","0","1","2","3","4","5","6","7","8","9");
$str='';
for($i=0;$i<strlen($title);$i++){
if( in_array($title[$i],$ar) ) {
$str.=$title[$i];
}
}
return $str;
}
Третий вариант воспользоваться фильтром wc_sanitize_taxonomy_name
Для этого в файле function.php вашей темы, добавляем функцию coder, и в этом же файле пишем следующий код:
add_filter('wc_sanitize_taxonomy_name','new_wp_link',10,2);
function new_wp_link($tax,$tax){
return coder($tax);
}Теперь все Ярлыки атрибутов будут преобразованы в транслитерацию, причём ни только в плагине Wp All Import, но и при создание поста.


Александр
Воспользовался вторым способом, вроде работает, спасибо!
Владислав
Только путь к файлу второго метода совсем другой:
wpai-woocommerce-add-on/src/services/
А как сделать так, чтобы этот кастомный файл подгружался из папки с дочерней темой?