获取

2017-07-07 38 views
1

我已经在WooCommerce创建了两个自定义的优惠券类型的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

如何找到优惠券金额(不是订单中使用的优惠券金额) – Gaurav

+0

谢谢你的支持。现在删除了重复的问题。 – Gaurav

回答

5

更新

首先,你不能访问到WC对象的属性,因为WooCommerce 3+,你需要使用WC_Couponget_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(); 
    } 
} 

要获得优惠券的折扣数额(并且还使用优惠券类型的方法)这里是这样的:得到WC_Coupon价格

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(); 
     } 
    } 
} 

现在,只需要使用get_amount()方法