2016-09-20 71 views
2

我有一個用於創建訂單的自定義API端點,但是我創建的訂單沒有任何運費,我也希望可以添加優惠券代碼給他們。這是我到目前爲止有:向WooCommerce添加送貨和優惠券wc_create_order()創建的訂單

$address = array(
    'first_name' => $payload['customer']['firstName'], 
    'last_name' => $payload['customer']['lastName'], 
    'email'  => $payload['customer']['email'], 
    'phone'  => $payload['customer']['phone'], 
    'address_1' => $payload['customer']['line1'], 
    'address_2' => $payload['customer']['line2'], 
    'city'  => $payload['customer']['city'], 
    'state'  => $payload['customer']['state'], 
    'postcode' => $payload['customer']['zip'], 
    'country' => 'US' 
); 
    $order = wc_create_order(); 
    foreach ($payload['items'] as $item) { 
    $order->add_product(get_product_by_sku($item['sku']), $item['qty']); 
    } 
    $order->set_address($address, 'billing'); 
    $order->set_address($address, 'shipping'); 
    $order->add_coupon(sanitize_text_field('couponcode')); 
    $order->update_status('processing'); 
    $order->calculate_shipping(); 
    $order->calculate_totals(); 

順序創建如同預期,但沒有運輸費用,以及優惠券代碼被應用,但是從優惠券的折扣不露面,總價格保持不變。任何幫助,將不勝感激!

+0

我剛剛嘗試使用add_shipping()方法後發現此:https://stackoverflow.com/questions/27573822/add-shipping-on-wc-create-order-woo-commerce但它沒有奏效。 ('','shipping',3354)由do_action(' wp_ajax_jsonp_order'),call_user_func_array,jsonp_create_order_api,WC_Abstract_Order-> add_shipping,wc_add_order_item' – bhamrick

回答

2

這對我有用,但要警告 - 我只有一種可用的運輸方法,它是自定義的。

// $shipping_methods = WC()->shipping() ? WC()->shipping->load_shipping_methods() : array(); 

$shipping = new WC_Shipping_Rate(); 
$order->add_shipping($shipping); 
// $item_id = $order->add_shipping($shipping); 

你可以通過額外的屬性WC_Shipping_Rate構造,看到https://docs.woocommerce.com/wc-apidocs/class-WC_Shipping_Rate.html

/** 
* Constructor. 
* 
* @param string $id 
* @param string $label 
* @param integer $cost 
* @param array $taxes 
* @param string $method_id 
*/ 
$shipping = new WC_Shipping_Rate($id, $label, $cost, $taxes, $method_id); 

所有PARAMS是可選的。