我在WooCommerce中创建了两种自定义优惠券类型:
function custom_discount_type( $discount_types ) {
$discount_types['cash_back_fixed'] =__( 'Cash Back fixed discount', 'woocommerce' );
$discount_types['cash_back_percentage'] =__( 'Cash Back Percentage discount', 'woocommerce' );
return $discount_types;
}
add_filter( 'woocommerce_coupon_discount_types', 'custom_discount_type',10, 1);
我希望在订单状态为"完成"之后获得折扣类型,例如:
function wc_m_move_order_money_to_user( $order_id, $old_status, $new_status ){
if( $order->get_used_coupons() ) {
if ($coupon->type == 'cash_back_fixed'){
$coupons_amont = ???
....
}
}
}
但是$coupon->type
不起作用。
如何获得订单中使用的优惠券类型?
我怎样才能获得原始优惠券金额?。
由于
答案 0 :(得分:15)
<强>更新强>
首先,您不能再访问WC对象属性,因为WooCommerce 3+并且您需要使用WC_Coupon
get_discount_type()
方法或is_type( 'cash_back_fixed' )
方法......
以下是这样做的方法:
// Get an instance of WC_Order object
$order = wc_get_order( $order_id );
// Coupons used in the order LOOP (as they can be multiple)
foreach( $order->get_used_coupons() as $coupon_name ){
// Retrieving the coupon ID
$coupon_post_obj = get_page_by_title($coupon_name, OBJECT, 'shop_coupon');
$coupon_id = $coupon_post_obj->ID;
// Get an instance of WC_Coupon object in an array(necesary to use WC_Coupon methods)
$coupons_obj = new WC_Coupon($coupon_id);
// Now you can get type in your condition
if ( $coupons_obj->get_discount_type() == 'cash_back_percentage' ){
// Get the coupon object amount
$coupons_amount1 = $coupons_obj->get_amount();
}
// Or use this other conditional method for coupon type
if( $coupons_obj->is_type( 'cash_back_fixed' ) ){
// Get the coupon object amount
$coupons_amount2 = $coupons_obj->get_amount();
}
}
获取优惠券折扣金额(以及使用优惠券类型方法)的方法如下:
global $wpdb;
$order = wc_get_order( $order_id );
## GET THE ORDER LINE ITEMS
$table = $wpdb->prefix . "woocommerce_order_items";
$order_items = $wpdb->get_results( "SELECT * FROM $table WHERE order_id = $order_id ");
print_r($order_items);
## GET THE COUPONS AMOUNTS IN THE ORDER
foreach( $order_items as $item_values ){
// Targeting "coupon" order item type
if( 'coupon' == $item_values->order_item_type ){
// Retrieving the coupon ID reference
$coupon_post_obj = get_page_by_title( $item_values->order_item_name, OBJECT, 'shop_coupon' );
$coupon_id = $coupon_post_obj->ID;
// Get an instance of WC_Coupon object (necesary to use WC_Coupon methods)
$coupons_obj = new WC_Coupon($coupon_id);
## Filtering with your coupon custom types
if( $coupons_obj->is_type( 'cash_back_fixed' ) || $coupons_obj->is_type( 'cash_back_percentage' ) || ){
// Get the corresponding Item ID
$item_id = $item_values->order_item_id;
// Get the Coupon discount amounts in the order
$order_discount_amount = wc_get_order_item_meta( $item_id, 'discount_amount', true );
$order_discount_tax_amount = wc_get_order_item_meta( $item_id, 'discount_amount_tax', true );
## Or get the coupon amount object
$coupons_amount = $coupons_obj->get_amount();
}
}
}
现在要获得
WC_Coupon
价格,只需使用get_amount()
方法
答案 1 :(得分:0)
就我而言,如果使用特定优惠券并支付订单(因此,如果处理状态已启用),我需要将新订单更改为“预购”(系统中已添加自定义状态)。
function change_status_to_preorder($order_id) {
$order = new WC_Order($order_id);
$coupon_codes = $order->get_coupon_codes();
if(in_array('MYCOUPON', $coupon_codes) && $order->get_status() == 'processing') {
$order->update_status('wc-pre-order', 'AUTO: note to shop manager');
}
}
add_action('woocommerce_new_order', 'change_status_to_preorder', 1, 1);