在Woocommerce 3中以编程方式设置自定义运费

时间:2018-02-14 12:02:52

标签: php wordpress woocommerce shipping hook-woocommerce

我搜索并找到了一些如何更改运费的例子。基本上我也希望这样做,但我想使用第三方API。

我已经设置了一个带有functions.php的自定义插件并将其激活。我认为使用了这样简单的东西:

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;
}

但是,当我运行结帐或购物篮时,过滤器似乎无法运行,因为我看不到echo。我也试过了print_r()

我是否遗漏了为什么我无法运行此过滤器?

1 个答案:

答案 0 :(得分:0)

由于这是一个过滤器,并且数据被缓存,因此您无法使用print_r()获得任何输出。

使其正常工作的正确方法如下:

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;
}

代码放在活动子主题(活动主题)的function.php文件中。

经过测试和工作。

  

有时,您可能需要来刷新送货方式
  1)首先清空车   2)转到运输区域设置,然后禁用/保存并重新启用/保存相关的运输方式。