2016-09-20 14 views
2

注文を作成するカスタムAPIエンドポイントがありますが、作成する注文に送料がかかりません。彼らへ。ここで私がこれまで持っているものです。WooCommerceへの送料とクーポンの追加

$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が動作しませんでした。 'WordPressデータベースエラーが発生しました。 'order_item_name'列は、クエリに対してnullにはなりません。INSERT INTO 'do_action(' order_item_type '、' wp_ajax_jsonp_order ')、call_user_func_array、jsonp_create_order_api、WC_Abstract_Order-> add_shipping、wc_add_order_item' – bhamrick

答えて

2

これは私にとってはうまくいったのですが、警告メッセージが表示されます。配送方法は1つしかありません。カスタムです。

// $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はオプションで見ることができます。

関連する問題