使其工作的正确方法如下:add_filter( 'woocommerce_package_rates', 'custom_shipping_costs', 20, 2 );函数 custom_shipping_costs( $rates, $package ) {//新增运费(可计算)$new_cost = 1000;$tax_rate = 0.2;foreach( $rates as $rate_key => $rate ){//不包括免费送货方式if( $rate->method_id != 'free_shipping'){//设置费率成本$rates[$rate_key]->cost = $new_cost;//设置税率成本(如果启用)$taxes = array();foreach ($rates[$rate_key]->taxes as $key => $tax){if( $rates[$rate_key]->taxes[$key] > 0 )$taxes[$key] = $new_cost * $tax_rate;}$rates[$rate_key]->taxes = $taxes;}}返回 $rates;}代码位于您的活动子主题(活动主题)的 function.php 文件中.经过测试并有效.有时,您可能需要更新运输方式:1)先清空购物车.2) 进入送货区域设置,然后禁用/保存并重新启用/保存相关的送货方式.I have searched and found a number of examples of how to change the shipping rates. Basically I am looking to do the same, but I want to use a 3rd party API.I have set up a custom plugin with a functions.php and activated it. I think used something simple like this:add_filter('woocommerce_package_rates','test_overwrite',10,2);function test_overwrite($rates,$package) { echo "<h2>Can you see me</h2>"; foreach ($rates as $rate) { //Set the price $rate->cost = 1000; //Set the TAX $rate->taxes[1] = 1000 * 0.2; } return $rates;}However when I run either the checkout, or basket, the filter does not seem to run because I cannot see the echo. I also tried print_r(). Am I missing something as to why I cannot run this filter ? 解决方案 As this is a filter and as the data is cached, you can't get any output with print_r().The correct way to make it work is the following:add_filter( 'woocommerce_package_rates', 'custom_shipping_costs', 20, 2 );function custom_shipping_costs( $rates, $package ) { // New shipping cost (can be calculated) $new_cost = 1000; $tax_rate = 0.2; foreach( $rates as $rate_key => $rate ){ // Excluding free shipping methods if( $rate->method_id != 'free_shipping'){ // Set rate cost $rates[$rate_key]->cost = $new_cost; // Set taxes rate cost (if enabled) $taxes = array(); foreach ($rates[$rate_key]->taxes as $key => $tax){ if( $rates[$rate_key]->taxes[$key] > 0 ) $taxes[$key] = $new_cost * $tax_rate; } $rates[$rate_key]->taxes = $taxes; } } return $rates;}Code goes in function.php file of your active child theme (active theme).Tested and works. Sometimes, you should may be need to refresh shipping methods: 1) Empty cart first. 2) Go to shipping Zones settings, then disable/save and re-enable/save the related shipping methods. 这篇关于在 Woocommerce 3 中以编程方式设置自定义运费的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
09-17 09:56