Диагностика проблемы с несохранением SKU в WooCommerce
Проблема: при добавлении или редактировании товара в WooCommerce пользовательский атрибут SKU не сохраняется, хотя поле заполнено. Это может проявляться как в админке, так и при массовом импорте товаров.
Основные признаки:
- SKU отображается пустым после сохранения товара;
- Ошибка отсутствует, но данные не сохраняются;
- Проблема появляется только для пользовательских атрибутов, а системные SKU сохраняются корректно.
Причины возникновения
- Конфликт с плагинами, которые изменяют метаданные товаров;
- Неправильный код в functions.php или кастомных плагинах, который перезаписывает SKU;
- Ошибки в способе сохранения пользовательских атрибутов (например, неправильный хук или формат данных);
- Версия WooCommerce или WordPress с багом, влияющим на сохранение метаданных.
Пошаговое решение проблемы
Шаг 1. Проверка плагинов и темы
Отключите все сторонние плагины, кроме WooCommerce, и переключитесь на дефолтную тему (например, Storefront). Проверьте, сохраняется ли SKU. Если да — значит причина в конфликте.
Шаг 2. Правильное добавление и сохранение пользовательского SKU
Для добавления пользовательского поля SKU рекомендуется использовать стандартный мета-ключ _sku. Если нужен отдельный атрибут, его нужно регистрировать правильно и сохранять через хук woocommerce_process_product_meta.
Пример кода для сохранения пользовательского SKU:
add_action('woocommerce_process_product_meta', 'save_custom_sku_field', 10, 1);
function save_custom_sku_field($post_id) {
if (isset($_POST['custom_sku'])) {
$custom_sku = sanitize_text_field($_POST['custom_sku']);
update_post_meta($post_id, '_sku', $custom_sku);
}
}И соответствующее поле в форме редактирования товара:
add_action('woocommerce_product_options_sku', 'add_custom_sku_field');
function add_custom_sku_field() {
woocommerce_wp_text_input(
array(
'id' => 'custom_sku',
'label' => __('Пользовательский SKU', 'woocommerce'),
'desc_tip' => true,
'description' => __('Введите уникальный артикул товара.', 'woocommerce'),
'value' => get_post_meta(get_the_ID(), '_sku', true)
)
);
}Шаг 3. Проверка прав и кеширования
- Убедитесь, что у пользователя есть права на редактирование товаров;
- Очистите кеш сайта и браузера;
- Отключите любые плагины кеширования и проверьте повторно.
Проверка результата
После внесения изменений:
- Создайте или отредактируйте товар, заполните поле пользовательского SKU;
- Сохраните товар;
- Проверьте в базе данных в таблице
wp_postmetaналичие ключа_skuс нужным значением; - Проверьте отображение SKU на страницах товара на фронтенде;
- Убедитесь, что SKU сохраняется после обновления страницы и при массовом редактировании.
Частые ошибки и как их исправить
Ошибка 1. Использование неправильного мета-ключа
WooCommerce использует именно _sku для SKU товара. Использование других ключей не даст результата. Решение — всегда использовать _sku.
Ошибка 2. Не подключен хук сохранения
Если не добавить функцию сохранения через woocommerce_process_product_meta, поле не сохранится. Проверьте, что код добавлен и выполняется.
Ошибка 3. Конфликт плагинов, изменяющих метаданные
Отключите подозрительные плагины, особенно те, что работают с товарами и метаданными. Если проблема ушла — ищите альтернативы или обновления.
Практические советы по безопасности и производительности
- Используйте
sanitize_text_field()для очистки пользовательских данных перед сохранением; - Не храните SKU в опциях или нестандартных таблицах, чтобы не усложнять логику и не снижать производительность;
- Проверяйте уникальность SKU, чтобы избежать конфликтов в WooCommerce;
- Используйте WP-CLI для массовой проверки и исправления SKU при необходимости.
Сравнение вариантов решения
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
Использование стандартного мета-ключа _sku | Максимальная совместимость с WooCommerce, простота | Нельзя хранить несколько SKU | Для большинства случаев оптимально |
| Создание пользовательского атрибута SKU | Гибкость, можно хранить дополнительные данные | Требует дополнительной обработки и кода | Использовать, если нужно расширенное управление |
| Использование плагинов для управления SKU | Удобство, готовые решения | Зависимость от стороннего кода, возможны конфликты | Подходит для крупных магазинов с особенными требованиями |