Проблема: неиспользуемые варианты товаров замусоривают каталог WooCommerce
В магазинах на WooCommerce часто появляется ситуация, когда в товарах с вариациями остаются неактивные или устаревшие варианты. Это затрудняет управление товарами и может сбивать с толку покупателей. Автоматическое отключение таких вариантов поможет очистить каталог и улучшить UX.
Диагностика проблемы: как определить неиспользуемые варианты товаров
Неиспользуемые варианты обычно характеризуются:
- Отсутствием продаж или заказов за определённый период.
- Нулевым или отрицательным остатком на складе.
- Статусом варианта «в наличии», но без активности.
Для диагностики можно использовать SQL-запросы к базе данных или плагины аналитики, но проще всего получить данные через PHP и WooCommerce API:
function get_unused_variations( $days = 90 ) {
$args = [
'post_type' => 'product_variation',
'posts_per_page' => -1,
'date_query' => [
[
'before' => date('Y-m-d', strtotime("-" . $days . " days")),
'column' => 'post_modified',
]
],
'meta_query' => [
[
'key' => '_stock_status',
'value' => 'outofstock',
]
]
];
$query = new WP_Query( $args );
return $query->posts;
}Этот код выбирает вариации, которые не обновлялись и находятся вне склада более 90 дней.
Пошаговое решение: автоматическое отключение неиспользуемых вариантов
1. Создаем функцию для отключения вариантов
function disable_unused_variations() {
$unused_variations = get_unused_variations(90); // 90 дней
foreach ( $unused_variations as $variation_id ) {
update_post_meta( $variation_id, '_stock_status', 'outofstock' );
// Дополнительно можно изменить статус вариации на 'draft' или 'private'
wp_update_post([
'ID' => $variation_id,
'post_status' => 'draft'
]);
}
}2. Настраиваем автоматический запуск через WP-Cron
if ( ! wp_next_scheduled( 'disable_unused_variations_hook' ) ) {
wp_schedule_event( time(), 'daily', 'disable_unused_variations_hook' );
}
add_action( 'disable_unused_variations_hook', 'disable_unused_variations' );Этот код запускает проверку и отключение неиспользуемых вариантов ежедневно.
Проверка результата после внедрения
- Проверьте в админке WooCommerce, что варианты с истекшим сроком использования теперь имеют статус «черновик» или «нет в наличии».
- Запустите функцию вручную, вызвав
disable_unused_variations()через консоль WP-CLI или временно добавив вызов в шаблон. - Проверьте отчет WooCommerce о продажах и остатков, чтобы убедиться, что отключаются только нужные варианты.
Частые ошибки и их исправление
- Ошибка: Варианты не отключаются, хотя условия выполнены.
Причина: Неверно настроены мета-поля или статусы. Проверьте, что используете правильный ключ_stock_statusи что варианты действительно помечены какoutofstock. - Ошибка: Отключаются активные варианты.
Причина: Неправильная логика фильтрации или слишком большой период.
Решение: Уменьшите период до 30 дней и тщательно протестируйте на тестовом сайте. - Ошибка: WP-Cron не запускается.
Решение: Убедитесь, что события WP-Cron активны, или настройте системный cron для вызоваwp-cron.php.
Практические советы для безопасности и производительности
- При работе с большим количеством товаров используйте пакетную обработку, чтобы не перегружать сервер. Например, обрабатывать по 50 вариантов за один запуск Cron.
- Логируйте отключение вариантов в отдельный файл или базу, это поможет отслеживать изменения.
- Добавьте возможность отмены отключения через админку, например, с помощью пользовательского фильтра.
- Используйте транзиенты для кеширования результатов запроса вариантов, если запросы занимают много времени.
Сравнение вариантов решения
| Метод | Преимущества | Недостатки |
|---|---|---|
| Ручное отключение через админку | Простота, полный контроль | Трудозатратно при большом количестве товаров |
| Использование плагина (например, Clearfy Pro с оптимизацией) | Автоматизация, готовые функции, поддержка | Платное, ограниченная гибкость |
| Кастомный код с WP-Cron (описанный способ) | Полная кастомизация, бесплатный | Требуются навыки программирования, поддержка кода на вас |