wordpress Woocommerce更新后设置购物车发货总额问题

nimxete2  于 2023-01-16  发布在  WordPress
关注(0)|答案(1)|浏览(114)

更新后,我的自定义航运金额规则不工作。更新前,我使用以下代码更新航运金额。

add_action('woocommerce_calculate_totals', 'mysite_box_discount');
function mysite_box_discount($cart ) 
{
  $cart->shipping_total=100;
  return $cart;
}

更新后,$cart数组的结构发生了变化,上面的代码停止工作,现在数据以受保护数组的形式进来,我发现$cart-〉get_shipping_total();我可以得到航运金额。
我还发现以下功能来更新航运金额。

$cart->set_shipping_total($amount);

所以我用它在下面的方式,但它不工作。

add_action('woocommerce_calculate_totals', 'mysite_box_discount');
function mysite_box_discount($cart ) 
{
  $cart->set_shipping_total(100);
  return $cart;
}

有谁能帮我一下,告诉我如何使用这个功能,或者是否有其他的方法。谢谢。

kmbjn2e3

kmbjn2e31#

你可以使用woocommerce_package_rates filter钩子来设置你的运输方式的成本,这将类似于你的旧代码:

add_filter('woocommerce_package_rates', 'custom_shipping_costs', 10, 2 );
function custom_shipping_costs( $rates, $package ){
    // Loop through shipping methods rates
    foreach ( $rates as $rate_key => $rate ){
        // Targeting all shipping methods except "Free shipping"
        if ( 'free_shipping' !== $rate->method_id ) {
            $has_taxes = false;
            $taxes = [];

            $rates[$rate_key]->cost = 100; // Set to 100
            // Taxes rate cost (if enabled)
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $tax > 0 ){
                    $has_taxes = true;
                    $taxes[$key] = 0; // Set to 0 (zero)
                }
            }
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件。

    • 您可能需要刷新航运缓存数据:**禁用,保存和启用,保存当前航运区的相关航运方式,在Woocommerce航运设置。

在此钩子中如果您需要循环浏览购物车项目(例如,进行一些计算),您将在函数代码中使用:

foreach( $package['contents'] as $cart_item_key => $cart_item ) {
     $product = $cart_item['data']; // Get the WC_Product instance Object

     // your code
}

相关问题