Добавить плату к заказу программно в Woocommerce 3

Я создаю итоги Woocommerce "на лету", так как элементы моей корзины импортируются из другой CMS.

В настоящее время у меня возникают проблемы с установкой пользовательской платы за каждый заказ, после чего я отмечаю заказ как "на удержании":

                $order->set_date_created($creation_tsz);

                $order->set_address( $address, 'billing' );
                $order->set_address( $address, 'shipping' );
                $order->set_currency('GBP');

                $order->add_fee('Imported Total', $imported_total_here);
                $order->set_fee();

                $order->calculate_totals();

                $order->update_status('on-hold');

Любой трек на этом будет оценен.

1 ответ

Решение

WC_Abstract_Legacy_Order метод add_fee() устарела и set_fee() Метод не существует для WC_Order Класс (существует только для WC_Cart а также WC_API_Orders классы).

Чтобы добавить комиссию к заказу программно с 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();

Проверено и отлично работает.

Другие вопросы по тегам