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, но и при создание поста.
Александр
Воспользовался вторым способом, вроде работает, спасибо!