Диагностика проблемы автоматического удаления товаров
Если после обновления WooCommerce или связанных плагинов вы замечаете, что некоторые товары исчезают из каталога, скорее всего, проблема связана с автоматической очисткой или синхронизацией данных, которая приводит к удалению товаров с определёнными условиями. Это особенно актуально при работе с импортом товаров или при наличии кастомных скриптов синхронизации.
Как понять, удаляются ли товары автоматически?
- Проверьте журнал обновлений WooCommerce и сторонних плагинов на наличие сообщений об удалении или синхронизации.
- Отключите все сторонние плагины импорта/синхронизации и повторите обновление — если проблема исчезла, причина в них.
- Проверьте, не используются ли хуки, которые запускают удаление товаров при обновлении через
functions.phpили кастомные плагины.
Пошаговое решение: отключаем автоматическое удаление товаров
WooCommerce сам по себе не удаляет товары при обновлении, но часто сторонние решения или кастомные скрипты используют хуки, например, upgrader_process_complete или woocommerce_update_options, которые могут запускать удаление.
Чтобы остановить это, выполните следующие шаги:
- Временно переключитесь на стандартную тему WordPress (например, Twenty Twenty-Three), чтобы исключить влияние темы.
- Отключите все плагины, кроме WooCommerce.
- В
functions.phpвашей темы или в кастомном плагине добавьте следующий код, который предотвратит запуск удаления товаров при обновлении:
add_filter('pre_site_transient_update_plugins', function($value) {
// Блокируем автоматические действия, связанные с удалением товаров
remove_action('upgrader_process_complete', 'your_custom_delete_function');
return $value;
});
Замените your_custom_delete_function на конкретное имя функции, которая удаляет товары — если известно.
Если вы используете сторонний плагин для импорта, проверьте его настройки на наличие опции автоматического удаления товаров, которые не найдены в файле импорта. Обычно она называется «Удалять отсутствующие товары» или «Sync delete missing products». Отключите эту опцию.
Как проверить, что решение сработало
- Обновите WooCommerce или плагин, который раньше вызывал проблему.
- Проверьте, что товары остались в каталоге, используя админку WooCommerce — раздел Товары.
- Если возможно, сравните список товаров до и после обновления с помощью SQL-запроса:
SELECT ID, post_title FROM wp_posts WHERE post_type = 'product';
Если список прежний — проблема решена.
Частые ошибки и как их исправить
- Ошибка: Не знаете, какая функция удаляет товары.
Решение: Включите WP_DEBUG и проверьте логи ошибок, ищите вызовыwp_delete_postили кастомные функции удаления. - Ошибка: Плагин импорта продолжает удалять товары, даже после отключения опции.
Решение: Обновите плагин до последней версии или обратитесь в поддержку, иногда опция работает некорректно. - Ошибка: Автоматическое удаление происходит из-за крон-задач.
Решение: Проверьте расписание wp-cron через плагин WP Crontrol, отключите подозрительные задачи.
Практические советы по безопасности и производительности
- Перед обновлением WooCommerce или плагинов всегда делайте резервную копию базы данных и файлов.
- Для больших магазинов используйте отдельный staging-сервер для тестирования обновлений и импорта.
- Отключайте автоматические удаления в плагинах импорта, если не уверены в их работе.
- Контролируйте действия через логи и используйте аудит изменений (например, плагин WP Activity Log).
Сравнение вариантов предотвращения удаления товаров
| Метод | Описание | Преимущества | Недостатки |
|---|---|---|---|
| Отключение опции в плагине импорта | Выключить автоматическое удаление в настройках | Простое решение без кода | Не всегда доступно; может конфликтовать с другими настройками |
| Удаление хука удаления в functions.php | Удалить вызовы удаления товаров через remove_action | Гибкий контроль; можно точечно отключить | Требует знания функции и хука; риск ошибок в коде |
| Отключение крон-задач, вызывающих удаление | Использовать WP Crontrol для управления задачами | Управление расписанием и предотвращение нежелательных действий | Может повлиять на другие задачи, требует тестирования |