Skip to main content

Если вы делали импорт товаров в WooCommerce (WordPress), то сталкивались с этой неприятной ошибкой:

Пример ошибок, после импорта товаров в WooCommerce

Ярлык «НАЗВАНИЕ АТРИБУТА» ‎слишком длинный (более 28 символов). Укоротите его, пожалуйста.

Что значит ошибка

При импорте товаров, в WooCommerce создаются атрибуты. У атрибутов (у постов и т.п.) есть SLUG (или ярлык) — уникальный идентификатор записи, состоящий из «безопасных» символов, которые могут участвовать в URL.

Например атрибут «Максимально допустимая эксплуатационная масса погрузчика» должна преобразоваться в SLUG «maksimalno-dopustimaya-ekspluatacionnaya-massa-pogruzchika«.

Но вот незадача, максимальная длинна SLUG 28 символов…. Ошибка возникала 5 лет назад и осталась до сих пор. Разработчики WooCommerce почему-то игнорируют проблему, хотя она появляется у всех и регулярно. Лично я, почти каждый раз при импорте товаров, сталкиваюсь с ней и страдаю. Давайте исправим ошибку.

Как исправить ошибку

1. Ставим/проверяем, что у вас установлен плагин Cyr-To-Lat, который преобразует SLUG (ярлыков) с русского на транслит (как на примере выше).

2. Заходим в файл functions.php вашей активной темы и прописываем в ней код:

add_filter('sanitize_taxonomy_name', function( $urldecode, $taxonomy ) {
 $urldecode = mb_substr($urldecode, 0, 27, 'utf-8');
 return $urldecode;
}, 10, 2 );

Путь к файлу /НАЗВАНИЕ _САЙТА/public_html/wp-content/themes/НАЗВАНИЕ_ВАШЕЙ_АКТИВНОЙ_ТЕМЫ/functions.php

Для не программистов объясню — мы устанавливаем свое событие при создании SLUG (ярлыков). Событие устанавливается не только товаров, но и постов и т.д. Код обрезает название атрибута до 28 символов и тем самым мы обходим ограничения WooCommerce. После выгрузки, этот код можно удалить.

Как массово удалить товары и атрибуты из WooCommerce

В процессе выгрузки, может понадобиться удалить неправильно созданные товары, атрибуты, картинки и т.п. Если товаров и атрибутов сотни или тысячи, вручную это делать оооочень долго. Нам нужно автоматизировать процесс.

Есть разные варианты, решил описать 2 способа:

Способ 1. Полуавтоматический

1. Ставим плагин WooCommerce Remove All Products, активируем, переходим в него и жмем кнопку DELETE

2. Создаем файл remove.php в корне вашего сайта и добавляем код для массового удаления атрибутов товаров, сохраняем файл:
<?php
include 'wp-load.php';

$attributes = json_decode(json_encode(wc_get_attribute_taxonomies()),true);
sort($attributes);

foreach ($attributes as $key => $attribute) {
    $deleted = wc_delete_attribute( $attribute['attribute_id'] );
    echo '<pre>';
    print_r(sprintf('Deleting %s - Result %s',$attribute['attribute_label'], $deleted));
    echo '</pre>';
}
?>

Дальше переходим по ссылке http://НАЗВАНИЕ _САЙТА/remove.php — все атрибуты удаляются. После использования, удалите файл.

3. Картинки товаров удаляем через медиафайлы вручную, категории товаров тоже удаляем вручную. Хорошо, что в WordPress есть массовый выбор и делать это не долго.

Способ 2. Автоматический, с помощью SQL

Можно удалить данные массово через базу данных, с помощью SQL запросов, но будьте аккуратней, чтобы не удалить лишнее. Так же замените в запросах префиксы таблиц wp_ на те, которые заданы у вас в настройках WP. И не забудьте сделать бекап базы данных и файлов сайта.

1. Удаляем массово товары в WooCommerce

DELETE FROM wp_term_relationships WHERE object_id IN 
(SELECT ID FROM wp_posts WHERE post_type IN ('product','product_variation'));
DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type IN 
('product','product_variation'));
DELETE FROM wp_posts WHERE post_type IN ('product','product_variation');

2. Удаляем массово атрибуты в WooCommerce

DELETE FROM wp_terms WHERE term_id IN 
(SELECT term_id FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%');
DELETE FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%';
DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN 
(SELECT term_taxonomy_id FROM wp_term_taxonomy);

3. Удаляем post meta

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

4. Картинки товаров удаляем через медиафайлы вручную

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

Даниил Джумайло

Project & product manager in IT, traveler, photo & video maker, love hiking

Leave a Reply