Как отключить оплату на сайте WooCommerce

По умолчанию WooCommerce требует выбрать способ оплаты, если сумма заказа больше нуля. Это можно отключить при помощи сниппета кода, чтобы покупатель просто заполнил данные и оформил заказ без оплаты. О нюансах этого решения рассказываем в статье.

Куда вставлять код

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

Избежать этой проблемы можно с помощью дочерней темы или плагина по типу «Code Snippets». Плагин делает то же самое, только вместо одного длинного файла на хостинге вы работаете в отдельном разделе в админке WordPress. В нём сниппеты отображаются как записи или страницы: у каждого есть название, описание, настройки и выключатель, чтобы приостановить работу сниппета без удаления.

Про работу с плагином «Code Snippets» у нас есть небольшая отдельная инструкция. Если вы раньше не работали с такими фрагментами кода, лучше сначала открыть эту статью, а потом вернуться к примерам ниже.

Статья на тему 👀
Как пользоваться плагином Code Snippets

Вариант 1. Сразу отправлять заказы в обработку

Этот вариант отключает необходимость выбирать способ оплаты при оформлении заказа. Покупатель заполняет свои данные, при необходимости выбирает доставку и оформляет заказ. WooCommerce сразу присваивает ему статус «В обработке». Для небольших магазинов, где заказы обрабатываются вручную, этого может быть вполне достаточно.

Нюанс 👀
Если заказ состоит только из товаров, которые одновременно являются виртуальными и загружаемыми, он сразу получит статус «Выполнен».

Чтобы внедрить такое поведение на сайте, добавьте сниппет с двумя фильтрами. Первый отключает необходимость оплаты для корзины, второй делает то же самое для заказа.

add_filter( 'woocommerce_cart_needs_payment', '__return_false' );
add_filter( 'woocommerce_order_needs_payment', '__return_false' );

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

Но есть один нюанс. В стандартной логике WooCommerce статус «В обработке» означает, что оплата за заказ уже получена. Система записывает дату оплаты и создаёт примечание Payment complete. А при наведении на статус в админке отобразится всплывающее окно с объяснением, что «оплата получена, заказ ожидает выполнения».

Если оплата проводится отдельно уже после оформления заказа и с заказами работаете не только вы, обсудите этот момент с сотрудниками. Чтобы не возникло ситуации, что кто-то по ошибке посчитал, что заказ оплачен, когда это не так.

Ещё для заказов в статусе «В обработке» могут сработать интеграции, которые реагируют на успешную оплату. Например, CRM или автоматические рассылки. 

Кроме того, WooCommerce позволяет редактировать товары, доставку, скидки и некоторые другие данные только у заказов со статусом «В ожидании оплаты» или «На удержании». 

Если эти ограничения вам мешают, используйте второй вариант.

Вариант 2. Оставлять заказы на удержании до оплаты

Если вам важно, чтобы WooCommerce не считал заказ оплаченным, можно использовать другой, чуть более сложный сниппет. Покупатель точно так же сможет оформить заказ без выбора способа оплаты, но заказ получит статус «На удержании».

Этот статус означает, что заказ принят, товар зарезервирован, но оплату ещё нужно подтвердить. Он удобен, если вы хотите отдельно отслеживать заказы, за которые покупатели ещё не заплатили.

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

// Отключаем обязательную оплату.
add_filter( 'woocommerce_cart_needs_payment', '__return_false' );
add_filter( 'woocommerce_order_needs_payment', '__return_false' );

// Переводим заказ без способа оплаты в статус On hold.
function hostiq_no_payment_order_on_hold( $order ) {
if ( $order instanceof WC_Order && $order->get_total() > 0 && ! $order->get_payment_method() ) {
$order->update_status( 'on-hold' );
}
}

// Классическое оформление заказа.
add_action(
'woocommerce_checkout_order_processed',
function( $order_id, $posted_data, $order ) {
hostiq_no_payment_order_on_hold( $order );
},
10,
3
);

// Блочное оформление заказа.
add_action(
'woocommerce_store_api_checkout_order_processed',
'hostiq_no_payment_order_on_hold'
);

// Не помечаем такой заказ как оплаченный.
add_filter(
'woocommerce_valid_order_statuses_for_payment_complete',
function( $statuses, $order ) {
if ( ! $order->get_payment_method() ) {
return array_diff( $statuses, array( 'on-hold' ) );
}

return $statuses;
},
10,
2
);

Когда получите оплату от покупателя, измените статус заказа вручную в зависимости от своего процесса работы.

Была ли статья полезной?

Спасибо за отзыв!
Створіть сайт на WordPress з інтерактивним помічником. Можна спробувати безкоштовноНАЧАТЬ ДЕЛАТЬ САЙТ
+
Send this to a friend