将订单项添加到WooCommerce

将订单项添加到WooCommerce

我一直在努力将Chamber Dashboard插件与WooCommerce(WC)集成在一起,为我们的用户提供PayPal以外的其他付款方式。作为WC集成的一部分,我必须创建产品,订单并向订单中添加订单项,以显示来自我们插件的自定义信息。尽管有关WC的文档很多,但我不得不努力正确添加订单项。这特别困难,因为订单是从管理员端而不是由用户创建的。

成员管理器插件随附一个前端表单,用户可以使用该表单来首次注册其业务或在Chambers中续订其业务。无论哪种方式,当他们填写表格时,都会在后端创建一张发票,该发票会发送给使用支票或PayPal付款的用户。

由于我们将使用WC中设置的任何付款选项替换PayPal,因此用户在提交表单时将被带到订单页面。当商会决定使用WC付款时,填写表格后会同时创建订单和发票。但是默认情况下,此订单仅包含产品信息(此处的产品是已设置的成员资格级别)。

为什么这里需要订单项?

商会可以选择在前端表单中添加处理费,税金或捐赠金额字段,这些字段也需要添加到WC订单中。这些数字通常随每个订单而变化,因此在创建订单时(填写前端表单时)必须将它们添加到订单中。幸运的是,WC使用函数wc_add_order_item()可以轻松地向订单添加订单项。

以下是用于在WC中添加订单的函数。作为该过程的一部分,将调用wc_add_order_item()来创建带有表单信息的订单项。

在WooCommerce中创建新订单

//Create a new order in WooCommerce
function cdashmm_create_wc_order($address, $product_id, $total, $customer_id, $donation, $tax, $processing_fee){
if(cdashmm_check_mm_connected_to_wc()){
global $woocommerce;
$args = array(
'customer_id' => $customer_id,
'created_via' => 'Chamber Dashboard Recurring Payments',
'add_order_note' => 'Created via Chamber Dashboard Member Manager');
// Now we create the order
$order = wc_create_order($args);
// The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php
$order->add_product( wc_get_product($product_id), 1); // This is an existing SIMPLE product
$order->set_address( $address, 'billing' );
$order->set_created_via( $args['created_via'] );
$order->add_order_note( $args['add_order_note'] );
$order->set_total( $total );
$order->update_status("Completed", 'Imported order', TRUE);
$order_id = $order->get_id();
if($donation){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Donation', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $donation);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $donation);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
if($processing_fee){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Processing Fee', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $processing_fee);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $processing_fee);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
if($tax){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Tax', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $tax);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $tax);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
}
return $order_id;
}

在上面的函数中,为每个需要创建的订单项调用wc_add_order_item()。
例如,如果在前端表单上启用了捐赠字段,那么我想将捐赠金额作为订单中的行项目包括在内。

if($donation){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Donation', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $donation);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $donation);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
}
}

Leave a Reply

Your email address will not be published. Required fields are marked *