drgzmmy6379
2018-02-14 12:02
浏览 157
已采纳

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

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 ?

图片转代码服务由CSDN问答提供 功能建议

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

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

  add_filter('woocommerce_package_rates','test_overwrite',10,2); 
 function test_overwrite($ rates,$ package){
  
 echo“&lt; h2&gt;你能看到我&lt; / h2&gt;”; 
 foreach($ rate as $ rate){
 //设定价格
 $ rate-&gt; cost = 1000; 
 /  /设置TAX 
 $ rate-&gt; taxes [1] = 1000 * 0.2; 
} 
返回$ rates; 
} 
   
 
 

但是 当我运行结账或篮子时,过滤器似乎没有运行,因为我看不到 echo 。 我也试过 print_r()

我是否遗漏了无法运行此过滤器的原因?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dos49618 2018-02-14 13:04
    已采纳

    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.

    打赏 评论

相关推荐 更多相似问题