wpclean.ru wordpress WPClean.ru

Как удалить неиспользуемые WooCommerce купоны для оптимизации базы данных

Диагностика проблемы с неиспользуемыми купонами 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() для обхода хуков Безопаснее, учитывает зависимости Может быть медленнее на больших объемах
Плагины очистки Готовые решения с интерфейсом Просто использовать, минимальный код Могут грузить сайт, не всегда гибкие
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙