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

Posted

技术标签:

【中文标题】在 Woocommerce 3 中以编程方式设置自定义运费【英文标题】:Set custom shipping rates programmatically in Woocommerce 3 【发布时间】:2018-07-25 00:03:47 【问题描述】:

我已经搜索并找到了一些如何更改运费的示例。基本上我也想做同样的事情,但我想使用第 3 方 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】:

由于这是一个过滤器并且数据被缓存,您无法使用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) 前往配送区域设置,然后禁用/保存并重新启用/保存相关配送方式。

【讨论】:

太好了,谢谢。我不了解清除缓存,因为价格会发生变化,我认为它会起作用。也就是说,如果我无法打印或回显,我怎么知道 $package 的样子。所以我得到了总重量,第 3 方 Api 的国家/地区?

以上是关于在 Woocommerce 3 中以编程方式设置自定义运费的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 3 中以编程方式更新产品库存

在 Woocommerce 中以编程方式添加新产品类别

在 WooCommerce 中以编程方式收取保存的 Stripe 卡

在 Android 中以编程方式设置自定义属性

在 Linux 中以编程方式设置自定义文件夹/目录图标

我在自定义 UITableViewCell 中以编程方式设置布局约束时遇到问题