WooCommerce: автозаполнение оплаченных заказов (в зависимости от способов оплаты)
обычно wooCommerce должен автозаполнять заказы для виртуальных продуктов. Но это не так, и это настоящая проблема, даже такая ошибка, как.
Итак, на данный момент Вы можете найти somme полезные вещи (но не очень удобные):
1) фрагмент кода (что вы можете найти в документах wooCommerce):
/** * Auto Complete all WooCommerce orders. */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order'); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'completed' ); }
но этот фрагмент не работает BACS*, оплата при доставке и чек оплата методы. Это нормально для Paypal и кредитных карт шлюзов способов оплаты.
* BACS это прямой способ оплаты банковского перевода
и ...
2) плагин: Заказы Автозаполнения WooCommerce
этот плагин работает для всех методов оплаты, а не другое кредитные карты шлюзы способы оплаты.
мой вопрос:
использование (в качестве base) фрагмент wooCommerce в пункте 1:
как я могу реализовать условный код на основе методов оплаты woocommerce?
Я имею в виду что-то вроде: Если способы оплаты не являются "BACS", "оплата при доставке" и "чек", то примените код фрагмента (статус обновления "завершен" для оплаченных заказов, касающихся виртуальных продуктов).
Я не кодер WooCommerce mega expert, поэтому я еще не нашел, как настроить целевые способы оплаты в woocommerce заказы.
помощь будет очень красиво.
спасибо.
1 ответов
Я нашел решение этой проблемы (работает с WC 3+):
/**
* AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE
*/
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
if ( ! $order_id )
return;
$order = wc_get_order( $order_id );
// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) {
return;
}
// "completed" updated status for paid Orders with all others payment methods
else {
$order->update_status( 'completed' );
}
}
код в функцию.php-файл активной дочерней темы (или активной темы).
С помощью этого поста: Как проверить способ оплаты в заказе WooCommerce по id?
С этого : get_post_meta( $order_id, '_payment_method', true );
С helgatheviking
банковский перевод, наложенный платеж и способы оплаты чека игнорируются и сохраняйте первоначальный статус заказа.
обновлен код для совместимости с WC 3.0+ (2017-06-10)
Расширенная версия для WooCommerce 3+ (2018)
add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
if ( ! $order_id )
return;
// Get an instance of the WC_Product object
$order = wc_get_order( $order_id );
// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
return;
// Updated status to "completed" for paid Orders with all others payment methods
} else {
$order->update_status( 'completed' );
}
}
код в функцию.php-файл активной дочерней темы (или активной темы).