Метод WC_Abstract_Legacy_Order
add_fee()
устарел , а метод set_fee()
не существует для WC_Order
Class (существует только для WC_Cart
и WC_API_Orders
classes) .
Чтобы добавить комиссию к заказу программно начиная с Woocommerce 3, это немного сложнее.Есть некоторые параметры, которые можно указать в качестве имени комиссии, налогового статуса, класса налога (при необходимости) и суммы сбора (без учета налогов) .
Также для расчета налога, в зависимости от настроек налогов, вам нужно будет установить массив, содержащий в минимумах код страны клиента (если налоги основаны на стране)
Пустьскажем, что имя переменной суммы комиссии $imported_total_fee
в коде ниже:
$order->set_date_created($creation_tsz);
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order->set_currency('GBP');
## ------------- ADD FEE PROCESS ---------------- ##
// Get the customer country code
$country_code = $order->get_shipping_country();
// Set the array for tax calculations
$calculate_tax_for = array(
'country' => $country_code,
'state' => '',
'postcode' => '',
'city' => ''
);
// Get a new instance of the WC_Order_Item_Fee Object
$item_fee = new WC_Order_Item_Fee();
$item_fee->set_name( "Fee" ); // Generic fee name
$item_fee->set_amount( $imported_total_fee ); // Fee amount
$item_fee->set_tax_class( '' ); // default for ''
$item_fee->set_tax_status( 'taxable' ); // or 'none'
$item_fee->set_total( $imported_total_fee ); // Fee amount
// Calculating Fee taxes
$item_fee->calculate_taxes( $calculate_tax_for );
// Add Fee item to the order
$order->add_item( $item_fee );
## ----------------------------------------------- ##
$order->calculate_totals();
$order->update_status('on-hold');
$order->save();
Протестировано и отлично работает.