在WooCommerce中为每10个订单设置自定义运输成本

亚历克斯·斯库丁

WP 5.3.3

创建订单后,我需要以编程方式更改运输成本。

此代码不影响:

add_action('woocommerce_new_order', 'custom_shipping_costs',  1, 1);
function custom_shipping_costs($order_id)
{
    $order = wc_get_order($order_id);
    $shippingItems = (array) $order->get_items('shipping');
    foreach ($shippingItems as $item) {
        $item->cost = 0;
    }
    $order->save();
}

请帮忙吗?

更新1:

重要的是,我需要在每n个订单中更改运输价格。像这样:

if ($order_id % 10 == 0) {
    // change shipping price for every 10-th order
}

更新2(解决方案):

感谢@LoicTheAztec-解决方案基于他的回答,并做了一些更改:

  1. set_option -> update_option
  2. set_total_tax引发错误,因此我对此部分进行了一些更改(此线程帮助了我)。

最终代码(进入functions.php您的活动子主题或活动主题的文件中):

// Set a count based on placed orders for shipping items cost change
add_action('woocommerce_checkout_create_order', 'action_wc_checkout_create_order', 10, 2);
function action_wc_checkout_create_order($order, $data)
{
    // get $order count for shipping item change
    $orders_count = (int) get_option('wc_orders_count_for_shipping');

    // Increase count for next order (starting count at 2 as this hook is triggered after shipping items hook)
    update_option('wc_orders_count_for_shipping', $orders_count > 0 ? $orders_count + 1 : 2);
}

// Set shipping cost to zero every 10-th orders when order is placed
add_action('woocommerce_checkout_create_order_shipping_item', 'action_wc_checkout_create_order_shipping_item', 10, 4);
function action_wc_checkout_create_order_shipping_item($item, $package_key, $package, $order)
{
    $orders_count = (int) get_option('wc_orders_count_for_shipping');

    // Every 10-th orders 
    if ($orders_count > 0 && ($orders_count % 10) === 0) {
        $item->set_total(0);
        $item->set_taxes(['total' => '0']);
        //$item->set_total_tax('0');
        $item->save();
        $order->calculate_totals();
    }
}
LoicTheAztec

首先,订单ID并不是连续的,因为它们基于帖子ID,该ID也用于Wordpress页面,帖子和所有其他自定义帖子(如Woocommerce产品和优惠券)。因此,我们需要对您的WooCommerce订单进行连续计数,才能对每10个订单进行更改。

在将订单数据保存到数据库之前下订单时,以下将把每10个订单的运输成本设置为零:

// Set a count based on placed orders for shipping items cost change
add_action( 'woocommerce_checkout_create_order', 'action_wc_checkout_create_order', 10, 2 );
function action_wc_checkout_create_order( $order, $data ) {
    $orders_count = (int) get_option('wc_orders_count_for_shipping'); // get $order count for shipping item change

    // Increase count for next order (starting count at 2 as this hook is triggered after shipping items hook)
    set_option('wc_orders_count_for_shipping', $orders_count > 0 ? $orders_count + 1 : 2 ); 
}

// Set shipping cost to zero every 10-th orders when order is placed
add_action( 'woocommerce_checkout_create_order_shipping_item', 'action_wc_checkout_create_order_shipping_item', 10, 4 );
function action_wc_checkout_create_order_shipping_item( $item, $package_key, $package, $order ) {
    $orders_count = (int) get_option('wc_orders_count_for_shipping');

    // Every 10-th orders 
    if( $orders_count > 0 && ( $orders_count % 10 ) === 0 ) {
        $item->set_total( '0' );
        $item->set_taxes( [ 'total' => '0' ] );
        $item->set_total_tax( '0' );
    }   
} 

代码进入您的活动子主题(或活动主题)的functions.php文件中。它应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WooCommerce中的自定义订单操作

来自分类Dev

在WooCommerce中将折扣的运输成本与折扣的购物车价格结合起来

来自分类Dev

WooCommerce-覆盖运输成本

来自分类Dev

将行中的值添加到列中(运输成本)

来自分类Dev

如何在Android的Java中为弹出菜单设置自定义主题?

来自分类Dev

在WooCommerce订单列表中显示Dokan自定义订单元数据

来自分类Dev

如何找出产品的运输成本

来自分类Dev

自定义BindingNavigator的ToolStripButtons在表单设计器中显示为已锁定

来自分类Dev

自定义WooCommerce订单表中的总行

来自分类Dev

在opencart(2.0.3.1)订单电子邮件(客户和管理员)的运输成本上增加税金

来自分类Dev

WooCommerce运输成本按产品重量计算

来自分类Dev

在自定义数组中设置一些WooCommerce订单和订单项目数据

来自分类Dev

根据WooCommerce中的运输类别自定义计算的运输成本

来自分类Dev

如何在WooCommerce中删除“运输成本已更新”消息

来自分类Dev

在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

来自分类Dev

基于特定运输类别的项目数量的Woocommerce运输成本

来自分类Dev

如何在WooCommerce订单中显示产品自定义字段(自定义SKU)

来自分类Dev

如何从WooCommerce获取自定义运输方法包

来自分类Dev

根据WooCommerce中的购物车小计将所有运输方式成本设置为零

来自分类Dev

如何在Android的Java中为弹出菜单设置自定义主题?

来自分类Dev

根据购物车中最大的尺寸选择运输成本

来自分类Dev

禁用Paypal上非运输项目的运输成本

来自分类Dev

将值从行添加到列(运输成本)

来自分类Dev

用 Java 计算运输成本

来自分类Dev

根据 WooCommerce 中的运输方式自定义订单接收页面

来自分类Dev

仅在 Woocommerce 中针对本地运输和已完成订单的自定义电子邮件通知

来自分类Dev

基于 Woocommerce 中的运输类别的运输成本折扣

来自分类Dev

Woocommerce 新订单自定义主题

来自分类Dev

Paypal Express - 隐藏运输方式和运输成本

Related 相关文章

  1. 1

    WooCommerce中的自定义订单操作

  2. 2

    在WooCommerce中将折扣的运输成本与折扣的购物车价格结合起来

  3. 3

    WooCommerce-覆盖运输成本

  4. 4

    将行中的值添加到列中(运输成本)

  5. 5

    如何在Android的Java中为弹出菜单设置自定义主题?

  6. 6

    在WooCommerce订单列表中显示Dokan自定义订单元数据

  7. 7

    如何找出产品的运输成本

  8. 8

    自定义BindingNavigator的ToolStripButtons在表单设计器中显示为已锁定

  9. 9

    自定义WooCommerce订单表中的总行

  10. 10

    在opencart(2.0.3.1)订单电子邮件(客户和管理员)的运输成本上增加税金

  11. 11

    WooCommerce运输成本按产品重量计算

  12. 12

    在自定义数组中设置一些WooCommerce订单和订单项目数据

  13. 13

    根据WooCommerce中的运输类别自定义计算的运输成本

  14. 14

    如何在WooCommerce中删除“运输成本已更新”消息

  15. 15

    在Woocommerce订单和电子邮件中的订单总数之后添加自定义文本

  16. 16

    基于特定运输类别的项目数量的Woocommerce运输成本

  17. 17

    如何在WooCommerce订单中显示产品自定义字段(自定义SKU)

  18. 18

    如何从WooCommerce获取自定义运输方法包

  19. 19

    根据WooCommerce中的购物车小计将所有运输方式成本设置为零

  20. 20

    如何在Android的Java中为弹出菜单设置自定义主题?

  21. 21

    根据购物车中最大的尺寸选择运输成本

  22. 22

    禁用Paypal上非运输项目的运输成本

  23. 23

    将值从行添加到列(运输成本)

  24. 24

    用 Java 计算运输成本

  25. 25

    根据 WooCommerce 中的运输方式自定义订单接收页面

  26. 26

    仅在 Woocommerce 中针对本地运输和已完成订单的自定义电子邮件通知

  27. 27

    基于 Woocommerce 中的运输类别的运输成本折扣

  28. 28

    Woocommerce 新订单自定义主题

  29. 29

    Paypal Express - 隐藏运输方式和运输成本

热门标签

归档