Измените статус заказа наложенного платежа по умолчанию на "В ожидании" вместо "Обработка" в Woocommerce
Мне нужна помощь с проблемой, связанной с плагином "WooCommerce Pay for Payment", который учитывает дополнительную плату за доставку. Проблема в том, что этот плагин автоматически устанавливает статус "обработки" в порядке, который вызывает благодарность по электронной почте за оплату (в случае локального платежа) и не отправляет уведомление по электронной почте о новом заказе, поэтому клиент смущен (я не отправлял деньги и я получил письмо "спасибо за ваш платеж").
Я пробовал это решение: установить статус заказа WooCommerce при создании заказа от обработки до ожидания
Но это только изменяет статус заказа обратно на "в ожидании", но все равно отправляет письмо с благодарностью за оплату.
Единственное, что мне нужно, это отправлять клиенту в каждом новом заказе электронное письмо о новом заказе, не более того (я бы хотел изменить статус на "обработка" вручную).
Спасибо за помощь, я не знаю, как решить, потому что я не мог найти файл PHP, вызывающий изменение статуса в плагине.
РЕДАКТИРОВАТЬ: Извините всех. Это была проблема ХПК в плагине woocommerce. Не платите за платеж, как я уже говорил. Woocommerce COD автоматически устанавливает статус "обработки".
Я нашел решение для этого на GitHub: здесь
Это первый код.
Основываясь на ответе на этот вопрос, этот код работал нормально для меня:
function sv_wc_cod_order_status( $status ) {
return 'on-hold';
}
add_filter( 'woocommerce_cod_process_payment_order_status', 'sv_wc_cod_order_status', 15 );
1 ответ
Код, который вы нашли в Github, устарел, неуклюж и сложен, так как теперь есть специальный фильтр-хук. Вам лучше попробовать этот легкий и эффективный код, который установит статус заказа по умолчанию для шлюза оплаты наложенным платежом (COD) на "В ожидании":
add_filter( 'woocommerce_cod_process_payment_order_status', 'change_cod_payment_order_status', 10 );
function change_cod_payment_order_status( $order_status, $order ) {
return 'on-hold';
}
Код помещается в файл function.php вашей активной дочерней темы (active theme). Проверено и работает.
Таким образом, статус заказа по умолчанию, установленный платежным шлюзом, теперь "На удержании" вместо "Обработка"
В моем случае,
add_filter( 'woocommerce_cod_process_payment_order_status','change_cod_payment_order_status', 10, 2 );
function change_cod_payment_order_status( $order_status, $order ) {
return 'on-hold';
}
Отлично работал в WC 4.42 + WP 5.4.1
Спасибо!
Два решения выше одинаковы за исключением:
- решение @LoicTheAztek имеет 2 аргумента в основной функции и имеет приоритет "10"
- решение @Jiří-Prek имеет аргументы в основной функции и имеет приоритет "15"
но для моего WP5.1.1 и WC3.5.7
function change_cod_payment_order_status( $order_status, $order ) {
return 'on-hold';
}
генерация ошибки
Неустранимая ошибка PHP: Uncaught ArgumentCountError: Слишком мало аргументов для функции change_cod_payment_order_status()
поэтому я предпочитаю использовать код только с одним аргументом в основной функции