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

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
Загрузка...

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

 

Один комментарий

    Александр

    Воспользовался вторым способом, вроде работает, спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*