WooCommerceで2つのカスタムクーポンタイプを作成しました:
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
は機能しません。
注文で使用されたクーポンタイプを取得するにはどうすればよいですか?
そして、元のクーポン金額を取得するにはどうすればよいですか?.
ありがとう
更新3
WooCommerce 3.7以降、_WC_Abstract
_インスタンスオブジェクトで_WC_Order
_メソッド get_coupon_codes()
を使用して、使用済みクーポンをget_used_coupons()
メソッドは非推奨です。
だからあなたはコードで置き換えます:
_foreach( $order->get_used_coupons() as $coupon_code ){
_
沿って:
_foreach( $order->get_coupon_codes() as $coupon_code ){
_
更新2
最初に、WooCommerce 3以降、WCオブジェクトのプロパティにアクセスできなくなりました。
_
WC_Coupon
_ getterメソッド を使用して、_WC_Coupon
_オブジェクトインスタンスからクーポンの詳細を取得する必要があります…
あなたの場合、あなたは get_discount_type()
methodまたは 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_code ){
// Retrieving the coupon ID
$coupon_post_obj = get_page_by_title($coupon_code, OBJECT, 'shop_coupon');
$coupon_id = $coupon_post_obj->ID;
// Get an instance of WC_Coupon object in an array(necessary to use WC_Coupon methods)
$coupon = new WC_Coupon($coupon_id);
// Now you can get type in your condition
if ( $coupon->get_discount_type() == 'cash_back_percentage' ){
// Get the coupon object amount
$coupon_amount1 = $coupon->get_amount();
}
// Or use this other conditional method for coupon type
if( $coupon->is_type( 'cash_back_fixed' ) ){
// Get the coupon object amount
$coupon_amount2 = $coupon->get_amount();
}
}
_
クーポンの割引額を取得する(およびクーポンタイプのメソッドも使用する)方法は次のとおりです。
_$order = wc_get_order( $order_id );
// GET THE ORDER COUPON ITEMS
$order_items = $order->get_items('coupon');
// print_r($order_items); // For testing
// LOOP THROUGH ORDER COUPON ITEMS
foreach( $order_items as $item_id => $item ){
// Retrieving the coupon ID reference
$coupon_post_obj = get_page_by_title( $item->get_name(), OBJECT, 'shop_coupon' );
$coupon_id = $coupon_post_obj->ID;
// Get an instance of WC_Coupon object (necessary to use WC_Coupon methods)
$coupon = new WC_Coupon($coupon_id);
## Filtering with your coupon custom types
if( $coupon->is_type( 'cash_back_fixed' ) || $coupon->is_type( 'cash_back_percentage' ) ){
// 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->get_amount();
}
}
_
したがって、クーポン価格を取得するには、_
WC_Coupon
_get_amount()
方法