Диагностика проблемы с неиспользуемыми купонами WooCommerce
В интернет-магазинах на WooCommerce часто накапливаются купоны, которые либо устарели, либо никогда не были использованы. Это увеличивает размер базы данных, замедляет работу запросов и усложняет администрирование. Чтобы убедиться, что в вашей базе есть неиспользуемые купоны, выполните следующий SQL-запрос через phpMyAdmin или любой MySQL клиент:
SELECT p.ID, p.post_title, p.post_date
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = 'usage_count'
WHERE p.post_type = 'shop_coupon' AND (pm.meta_value IS NULL OR pm.meta_value = '0');Этот запрос покажет купоны с нулевым количеством использований. Если их много — стоит очистить базу.
Пошаговое решение: удаление неиспользуемых купонов через код
1. Резервное копирование базы данных
Перед любыми изменениями обязательно сделайте резервную копию базы данных, чтобы избежать потери данных.
2. Создание PHP-скрипта для удаления купонов с нулевым usage_count
Добавьте следующий код в файл functions.php вашей дочерней темы или выполните через WP-CLI или отдельный плагин для кастомных функций:
function wpclean_delete_unused_coupons() {
$args = array(
'post_type' => 'shop_coupon',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'usage_count',
'value' => '0',
'compare' => '=',
),
array(
'key' => 'usage_count',
'compare' => 'NOT EXISTS',
),
),
'fields' => 'ids',
);
$coupon_ids = get_posts($args);
if (!empty($coupon_ids)) {
foreach ($coupon_ids as $coupon_id) {
wp_delete_post($coupon_id, true); // true - удаление без перемещения в корзину
}
}
}
add_action('admin_init', 'wpclean_delete_unused_coupons');Этот код находит все купоны без использований и удаляет их принудительно.
3. Удаление кода после выполнения
Важно: удалить или закомментировать этот код после выполнения, чтобы не делать ненужных запросов на каждом заходе в админку.
Проверка результата после внедрения
Повторите SQL-запрос из раздела диагностики. Если он вернул пустой результат — удаление прошло успешно. Также проверьте в админке WooCommerce - Купоны, что количество купонов уменьшилось и все неиспользуемые удалены.
Частые ошибки и как их исправить
- Нет доступа к базе данных или phpMyAdmin. Используйте WP-CLI или плагины с SQL доступом.
- Купоны не удаляются. Проверьте, что у пользователя, под которым выполняется код, есть права на удаление записей.
- Удаляются купоны с использованием. Проверьте мета-ключ
usage_count, иногда он может называться иначе (например, сторонние плагины могут переопределять логику). - Функция вызывается на каждом заходе в админку. Уберите хук после однократного запуска или используйте дополнительную проверку, например, флаг в опциях.
Практические советы по безопасности и производительности
- Всегда делайте резервные копии перед массовым удалением.
- Запускайте скрипты удаления на тестовом стенде перед боевым сайтом.
- Для больших баз данных используйте пакетное удаление, ограничивая количество удаляемых купонов за раз.
- После удаления оптимизируйте таблицы базы данных командой
OPTIMIZE TABLE wp_posts;иOPTIMIZE TABLE wp_postmeta;.
Сравнение способов удаления неиспользуемых купонов
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| SQL-запросы вручную | Прямое удаление через SQL в базе | Быстро, без загрузки WordPress | Риск удаления нужных данных, требует опыта |
| PHP-скрипт с WP функции | Использование wp_delete_post() для обхода хуков |
Безопаснее, учитывает зависимости | Может быть медленнее на больших объемах |
| Плагины очистки | Готовые решения с интерфейсом | Просто использовать, минимальный код | Могут грузить сайт, не всегда гибкие |