WooCommerce: как запретить выставление счетов при отключенных платежах

Диагностика проблемы: почему выставляются счета при отключенных платежах

В WooCommerce иногда возникает ситуация, когда клиентам продолжают автоматически выставляться счета, несмотря на то, что все платежные методы отключены. Это приводит к путанице и ошибкам при оформлении заказов, а также лишней нагрузке на поддержку.

Основные признаки проблемы:

  • В настройках WooCommerce все платежные шлюзы отключены;
  • Заказы переходят в статус «Ожидает оплаты» и генерируются счета;
  • Клиенты получают уведомления о необходимости оплаты, хотя оплатить нельзя;

Почему так происходит?

По умолчанию WooCommerce не блокирует создание заказов с выставлением счетов, если выбран способ оплаты «Оплата при получении» или если в коде темы/плагина есть кастомные обработчики статусов. Также часть сторонних плагинов может автоматически создавать счета или выставлять заказы в нужный статус вне зависимости от активных платежей.

Пошаговое решение: запрет выставления счетов при отключенных платежах

Ниже приведён метод на PHP для functions.php вашей темы или в виде отдельного мини-плагина, который блокирует оформление заказа, если неактивен ни один из платежных методов:

add_filter('woocommerce_checkout_process', 'block_checkout_if_no_payment_methods');
function block_checkout_if_no_payment_methods() {
    $available_gateways = WC()->payment_gateways()->get_available_payment_gateways();
    if (empty($available_gateways)) {
        wc_add_notice(__('Оплата временно недоступна. Пожалуйста, попробуйте позже.'), 'error');
    }
}

Этот фильтр запускается при попытке оформить заказ. Если массив доступных платежей пуст, пользователь увидит ошибку, и заказ не создастся.

Дополнительно: убрать автоматическое выставление счетов для офлайн-методов

Если вы используете офлайн-платежи (например, «Оплата при получении»), можно дополнительно запретить автоматическую смену статуса заказа на «Ожидает оплаты» с выставлением счета. Для этого добавьте:

add_action('woocommerce_checkout_order_processed', 'disable_invoice_creation_for_offline', 10, 3);
function disable_invoice_creation_for_offline($order_id, $posted_data, $order) {
    $payment_method = $order->get_payment_method();
    $offline_methods = array('cod', 'cheque', 'bacs'); // список офлайн-методов
    if (in_array($payment_method, $offline_methods)) {
        $order->update_status('pending'); // заказ остаётся в ожидании, без счета
    }
}

Проверка результата после внедрения

Для тестирования:

  1. Отключите все платежные методы в WooCommerce;
  2. Попробуйте оформить заказ на сайте;
  3. Убедитесь, что при попытке оформления появляется ошибка «Оплата временно недоступна» и заказ не создаётся;
  4. Если офлайн-методы активированы, проверьте, что статус заказа не меняется автоматически без вашей команды.

Частые ошибки и их исправление

  • Ошибка: После внедрения кода заказ всё равно создаётся и выставляется счёт.
    Причина: Кэширование сайта или сторонние плагины перезаписывают логику.
    Решение: Очистите кэш, временно отключите плагины, связанные с оплатой, и повторите тест.
  • Ошибка: Клиенты не видят сообщение об ошибке.
    Причина: Некорректное подключение фильтра или конфликт с темой.
    Решение: Проверьте, что код добавлен в functions.php активной темы или в плагин, и что нет синтаксических ошибок.
  • Ошибка: Офлайн-методы всё равно генерируют счета.
    Причина: Названия методов в коде не совпадают с идентификаторами платежей.
    Решение: Проверьте идентификаторы в WooCommerce > Настройки > Платежи и обновите массив $offline_methods.

Практические советы по безопасности и производительности

  • Добавляйте кастомный код через дочернюю тему или отдельный плагин, чтобы не потерять при обновлениях.
  • Тестируйте изменения на staging-среде, особенно если на сайте активно много плагинов платежей.
  • Используйте Clearfy Pro для оптимизации WooCommerce — этот плагин помогает отключать ненужные стили и скрипты, что улучшит производительность сайта.
  • Отключение выставления счетов при отсутствии платежей снижает вероятность мошенничества и ошибок при оплате, повышая безопасность процесса оформления заказа.

Сравнение способов решения проблемы

МетодОписаниеПлюсыМинусы
Отключение платежей в админкеПростое отключение всех платежейБыстро и без кодаЗаказы могут создаваться с ошибками
Код на PHP с проверкой доступных платежейБлокирует оформление без активных платежейГибко, можно кастомизироватьТребуется навыки PHP
Использование сторонних плагиновПлагины для контроля оформления и счетовДополнитель функционалМожет замедлять сайт, платные
Как удалить CSS стили Яндекс.Метрики из WordPress без ущерба для аналитики
18.06.2026
Как создать динамические блоки в WordPress с помощью шорткодов
11.12.2025
Как сделать динамическое меню в WordPress с изменяющимся активным пунктом
28.12.2025
Как удалить неиспользуемые метаданные из базы WordPress для ускорения сайта
10.05.2026
Как отключить XML-RPC в WordPress без плагинов для защиты сайта
04.12.2025