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

2024-01-31

我搜索并找到了许多如何更改运费的示例。基本上我想做同样的事情,但我想使用第 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().

我是否遗漏了一些关于为什么我无法运行此过滤器的信息?


由于这是一个过滤器并且数据被缓存,因此您无法获得任何输出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) 进入运输区域设置,然后禁用/保存并重新启用/保存相关运输方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Woocommerce 3 中以编程方式设置自定义运费 的相关文章

随机推荐

  • 我可以在 Javascript 中抛出异常来停止 Javascript 执行吗?

    我尝试模拟一个问题 从外部 url 加载的脚本会停止执行我的网站上的任何其他脚本 我尝试通过调用不退出的函数来模拟这样的问题 我可以在 firebug 中看到错误 但页面上的不同脚本仍然执行 JavaScript 中是否存在不同类型的错误
  • 8086 汇编中的大二进制移位?

    我有一个 512 字节长的二进制数据块 我想知道如果我想将其右移一次 最有效的方法是什么 我现在最好的猜测 对于汇编来说非常新 是我必须首先检查一个块 可能是 int 看看它将移出什么 移出 然后携带先前 int 移出的任何内容并继续携带这
  • Java:如何计算从InputStream读取的字节数而不事先分配完整内存

    我有一个 Java 后端 用户可以将文件上传到其中 我想将这些上传的文件限制为最大大小 并希望在上传时检查上传的字节数 并在达到限制后立即中断传输 目前 我在分配之前使用 InputStream available 来确定估计大小 但这似乎
  • 在 Elixir 中引用管道值

    我想计算字符串中单词出现的次数 实现是有问题的 但让我们用它来演示我的问题 def count sentence do words String split sentence occurrences Enum map words fn w
  • python read() 从 stdout 比逐行读取慢得多(啜饮?)

    我有一个 python SubProcess 调用 它运行一个可执行文件并将输出通过管道传输到我的子进程标准输出 在 stdout 数据相对较小 约 2k 行 的情况下 逐行读取和作为块读取 stdout read 之间的性能相当 其中 s
  • 使用 Select-String 在 powershell 中检查两个 .txt 文件

    我对编写 powershell 脚本完全陌生 到目前为止 我使用普通批次来达到我的目的 因为这是我公司的要求 在此批处理中 我使用嵌套的 foo 循环来比较两个 txt 文件 具体来说 我想要执行以下操作 文件 1 包含大量字符串 每个字符
  • 我可以保留“未使用的CSS选择器”吗?

    我注意到 svelte 会自动清除我的 css 所有 未使用的 css 选择器 都将被删除 例如 p class blue This is a paragraph p 红色 类的样式将被删除 如何保留 blue 选择器 我想稍后某个时候使用
  • 在大屏幕上将 n-div 放在一起,在小屏幕上将 n-div 放在彼此下面

    我正在努力实现这个效果 如果屏幕足够大 我想将 n div 彼此相邻放置 否则将一个放在彼此下方 并且我希望将这些 n div 包含在一个 div 中 我的代码中的黄色容器 和标题区域 在我的代码中为黑色 封装所有内容的包装器中的黄色容器
  • XSL 交叉引用

    我现在正在学习 XSL 有一个关于交叉引用的问题 我的目标 XML 文件的结构如下
  • Android 列表视图中的滚动是如何工作的?

    我有一个 android 应用程序 在活动中有一个列表视图 如果我这么称呼的话 列表视图具有三种数据状态 没有从 inet 加载数据 gt 只有一个虚拟项可见 表示正在加载数据 数据已加载并显示在列表中 单击一个列表项 现在显示该列表项的更
  • 如何使用OpenRowSet向空白文件中插入数据?

    如何使用开放行集将数据插入空白文件 我需要在 txt 文件 例如 D TDB 中插入一些选择输出 例如select from sys tables 来自数据库 INSERT INTO OPENROWSET Microsoft Jet OLE
  • mysql查询中日期时间差的总和

    Mysql表的列是 Starttime type datetime Stoptime type datetime Data Starttime stoptime 2013 10 25 09 00 00 2013 10 25 17 00 00
  • 可以知道一个字符串是否是用base64编码的吗?

    就那么简单 我正在制作一个应用程序 用户必须扫描 QR 码 基本上是 Base64 编码的字符串 有什么方法可以在解码之前验证该字符串是否以 Base64 编码并遵循应用程序的流程 我的代码负责的是 func captureOutput c
  • 在 SiteEdit 2009 中加载页面时出现“无法从组件 xml 架构获取类型信息”

    我使用此处给出的答案在 SitEdit 2009 SP2 上启用了内联编辑 使用 XSLT TBB 时如何在 SiteEdit 中启用内联字段编辑 https stackoverflow com questions 9667640 how
  • utf8 <-> utf16:codecvt 性能不佳

    我正在研究一些旧的 并且专门面向 win32 的 东西 并考虑使其更加现代 可移植 即在 C 11 中重新实现一些广泛可重用的部分 其中之一是 utf8 和 utf16 之间的转换 在我使用的 Win32 API 中MultiByteToW
  • Xcode 9 GM - 导出并上传到 App Store 崩溃

    我正在尝试将使用 ARKit Unity 构建 的应用程序上传到 iTunes Connect 以进行 TestFlight 分发 导出和上传到应用程序商店的过程均来自Xcode gt Organizer我看到 剥离 APPNAME app
  • 检查点后未使用新的 Spark.sql.shuffle.partitions 值

    我有一个 Spark 的结构化流应用程序 带有检查点以在 parquet 中写入输出并使用默认的 Spark sql shuffle partitions 200 我需要更改 shuffle 分区 但不使用新值 以下是应用程序重新启动后检查
  • C# ModInverse 函数

    是否有一个内置函数可以让我计算 a mod n 的模逆 例如19 1 11 mod 30 在本例中为 19 1 11 19 由于 Net 4 0 使用特殊的模块化算术函数 ModPow 实现 BigInteger 它产生 X power Y
  • 如何更改 data.table 中因子列的级别

    改变水平的正确方法是什么factor中的列data table 注 不是数据框 library data table mydt lt data table id 1 6 value as factor c A A B B B C key i
  • 在 Woocommerce 3 中以编程方式设置自定义运费

    我搜索并找到了许多如何更改运费的示例 基本上我想做同样的事情 但我想使用第 3 方 API 我已经使用functions php 设置了一个自定义插件并激活了它 我认为使用了这样简单的东西 add filter woocommerce pa