Woocommerce:以编程方式更新购物车中的商品

2023-12-04

我需要以编程方式动态更改购物车中商品的价格。

我尝试过 Woocommerce 操作挂钩、购物车和会话对象的不同组合,但似乎没有任何效果。我认为这不会那么具有挑战性。

add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price' );

function change_cart_item_price( $cart_object ) {

    foreach ( $cart_object->cart_contents as $key => $value ) {

        if( 123 == $value['data']->id ) {

            $new_price = function_to_get_new_price( $value, get_current_user_id( ) );
            $value['data']->price = $new_price;
        }
   }
}

上面的代码仅在结账页面或更新购物车时更改每件商品的价格(即:从购物车中删除商品时调用钩子),但不是无限期的。

我正在使用 Woocommerce Gravity Forms 插件。我特别有一种产品,特定用户将多次订购该产品。用户将被允许 5 次免费,只需支付运费,以上每 5 次将收取 20 美元。我使用动态填充字段的重力形式挂钩进行了如此多的编码和功能。运输特定于重力形式内的字段,因此我将计算留给重力形式。

我的问题是,如果用户减少订单中该产品的数量(从购物车中删除其中一件商品),则应重新计算购物车中同一产品的每件商品的价格,否则可能会结束-带电(曾经是第六名的商品现在是第四名,但价格保持不变,这是不应该的)

所以,每次从购物车中删除某些商品时,我想根据该特定产品的数量重新计算购物车中每件商品的价格。

- - 编辑 - -

上面的代码有效,但我意识到问题一定是我用来显示价格的自定义循环......

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product = $cart_item['data'];
    if( 123 == $_product->post->ID ) {
        $price_not_updated = $cart_item['data']->price;
    }
}

我想通了......我查看了 woocommerce 购物车文档,基本上意识到我得到的价格尚未计算。因此,在运行循环之前,我必须执行最初挂钩的操作来更改价格。

感谢您的帮助!

function getUpdatedCartPrices() {

    do_action( 'woocommerce_before_calculate_totals', WC()->cart );

    $horray_updated_prices_works = array();

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $_product = $cart_item['data'];
        if( 123 == $_product->post->ID ) {

            $horray_updated_prices_works[] = $cart_item['data']->price;

        }
    }

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

Woocommerce:以编程方式更新购物车中的商品 的相关文章

  • PHP SFTP 简单文件上传

    我正在使用 phpseclib SFTP 类 并尝试上传这样的文件 sftp new Net SFTP mydomain com if sftp gt login user password exit Login Failed sftp g
  • 命令“php”无法识别,但它已在 Windows PATH 中注册

    我在 Windows 服务器上的 PATH 字符串中设置了 C Ampps php 但是当我在 PHPStorm 终端上键入 php 时 总是给出 php is not recognized as an internal or extern
  • 这段 PHP 代码是否会导致其他人的 Apache 崩溃?

    preg match all a str repeat a 1000 matches 编辑 稍微更改正则表达式以使其更简单 同时仍然崩溃 我在 PHP 5 3 5 和 Apache 2 0 上运行它 它使服务器崩溃 如果我将 339 更改为
  • WooCommerce 从所有订单中获取项目元

    我正在尝试显示 WooCommerce 插件中所有已完成订单的所有订单项目 带有项目元 我还想将显示限制为仅显示 10 个订单项目 我已经弄清楚如何显示所有订单项目 但无法将数量限制为 10 这是我当前用于显示所有订单项目的代码 args
  • whereHas 之后的 where 查询在 Laravel 5.4 中无法正常工作

    就我而言 我有channels与多对多关系的表类别 table 我想获取他们的频道类别包含像doing这样的动态值LIKE查询每个类别的标题 但我需要检查 a 的另一列channel通过 where 子句 这是一个channel结构 id
  • MySQL:删除包含特定参数且早于一天的行[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 mysql 为我的网站创建一个登录系统 它在基于订阅的系统上运行 如果参数 premium 等于 1 DAY 如果它早于一
  • 如何在PHP5.5上安装V8js?

    我想在 Ubuntu 12 04 上安装 PHP5 5 的 v8js 扩展 但无法使其工作 当我尝试使用 PECL 安装 v8js 扩展版本 0 2 0 最新 时 我收到以下消息 配置 错误 libv8 必须是版本 3 24 6 或更高版本
  • 我可以为我的记录器使用静态类吗?

    最近我被告知静态类 方法是邪恶的 以我的 Logger 类为例 class Logger private static logs array public static function add msg self logs msg publ
  • 有没有好的php库可以将html/php文档转换为对象

    我看到很多可以解析 html 的 php 库 一个很好的例子是查询路径 http querypath org 它模仿 Jquery Api 不过 我想分析一下phtml 因此 该库不仅擅长分析 DOM 而且还擅长分析php处理指令 http
  • 如何循环并访问多维且关联的数组中的各个元素? PHP,JSON 或 XML

    我正在通过 API zotero org 检索书目数据 它与底部的示例类似 只是更复杂 示例是键入的 我想检索一条或多条记录并在页面上显示某些值 例如 我想循环遍历每个顶级记录并以格式良好的引文打印数据 暂时忽略正确的围兜样式 假设我只想为
  • PHP 的 Checkstyle 作为 Eclipse 插件

    有这样的插件可用吗 是的 有一个 PHP 工具集成 http www phpsrc org 与 Checkstyle 等效的是 PHP CodeSniffer 一个 pear 包 您可以在这里找到更多信息PHP CodeSniffer ht
  • php mail() 函数:如何在 html 消息中显示图像和使用样式[重复]

    这个问题在这里已经有答案了 我目前遇到 php 问题mail 功能 第一个问题是某些电子邮件浏览器 例如 gmail 不会自动显示图像 第二个问题是该消息未使用我输入的样式 p 这是仅适用于 php 的 消息 部分的代码mail 功能 其余
  • 数组和foreach

    posts array message gt this is a test message foreach posts as post echo post message 为什么上面的代码只输出message中的第一个字母 t Thanks
  • 你能帮助我更好地理解 PHP 类吗?

    我是一个学习速度很慢的人 我想在编码方面 我已经学习 PHP 几年了 但我仍然不理解类 所以是时候我付出一些努力 至少更好地理解它们了 我凡事都使用函数 人们经常在这里对我发表评论 他们不敢相信我有一个社交网站 而且我不使用课程 我真的不明
  • POST 数据加密 - HTTPS 足够吗?

    考虑一个场景 其中用户身份验证 用户名和密码 由用户在页面的表单元素中输入 然后提交 POST 数据通过 HTTPS 发送到新页面 其中 php 代码将检查凭据 现在 如果黑客位于网络中 并说可以访问所有流量 那么在这种情况下应用程序层安全
  • 在 MySQL 数据库中存储大文件的更好方法?

    我有一个 PHP 脚本 您可以使用它上传非常大的文件 最大 500MB 并且该文件的内容存储在 MySQL 数据库中 目前我做这样的事情 mysql query INSERT INTO table VALUES uploadedfile f
  • Active Record 库的 CodeIgniter 挂钩

    我需要一些帮助来理解 CodeIgniter 的钩子逻辑 以使代码适应我的需要 这一页 https www codeigniter com user guide general hooks html https www codeignite
  • 比在配置文件中以纯文本形式存储 mysql 密码更好的方法吗?

    许多 PHP 程序要求用户将 mysql 密码以纯文本 字符串或常量 形式存储在应用程序根目录的配置文件中 这一直困扰着我 这么多年过去了 还有更好的方法吗 到目前为止 我已经提出了两个最小的安全提升方案 使用 htaccess 中的规则使
  • 发帖到 FB 粉丝专页时如何解决“不支持的发帖请求”?

    我有一个可以执行 ff 的脚本 发布指向用户时间线 墙的链接 以管理员身份发布指向用户页面的链接 发布到用户的个人资料页面工作正常 然而 发布到粉丝页面的行为很奇怪 我我能够发帖但我回来了 不支持的发布请求 错误 我已经搜索过这个问题并尝试
  • ImagickException 并显示消息 Postscript delegate 在 MAMP 3.0.5 上失败

    我正在尝试使用 MAMP 3 0 5 将 PDF 转换为 png 文件 我知道我的 PHP 代码可以在我们的 Linux 服务器上正常运行 我在 Mac OSX 10 8 5 上安装了 MAMP 3 0 5 当我运行脚本将 PDF 转换为

随机推荐

  • 在表单提交的网址中间添加问号

    当我单击表单中的提交按钮时 它会添加一个 就在 之前 因此 app pageName 更改为 app pageName 这是正常行为吗 代码只是基本的东西 angular module myApp controller MyCtrl fun
  • 如何在进入 Java 应用程序时更改光标

    我遇到了一些我无法解决的问题 我正在编写一个带有接受拖放操作的 JList 的 Swing Java 应用程序 我想在将文件或文件夹从系统拖到 Java 应用程序上时更改光标 我自己找到了 不过还是感谢克林顿的回答 这是我用过的 首先创建
  • Socket tcp C# 如何清除输入缓冲区?

    我正在为 Windows Phone 编写一个应用程序 我需要与服务器通信并传输数据 SERVER是用C 编写的 我无法修改它 客户是我必须写的 服务器被设计为客户端连接到它并传输数据 连接对于所有传输都保持打开状态 通过用 C 编写代码
  • Infinispan相当于ehcache的copyOnRead和copyOnWrite

    我计划在现有的网络应用程序中实施缓存解决方案 没什么复杂的 基本上是一个支持溢出到磁盘和自动驱逐的并发映射 将来可能需要对缓存进行集群 但不是现在 我喜欢 ehcache 的 copyOnRead 和 copyOnWrite 功能 因为这意
  • 将 Crypto++ 对象保存到 std::vector

    我想将 Crypto 密钥保存到std vector
  • 如何使scrollviewer滚动像素而不是组件(wpf)

    我试图让我的滚动查看器完美地滚动 也就是说 我有一个滚动查看器 它包含一个 stackpanel 堆栈面板包含一个用户制作的用户控件 并且它们可以在运行时动态增加或减少 问题是 假设我的堆栈面板中只有 2 个用户控件 滚动查看器只有 2 级
  • 拖动对象时启用其他事件

    我正在开发一个控制台 我想将按钮拖动到网格中 要拖动按钮 我使用以下过程 Public drag As Boolean False Public ptX As Integer 0 Public ptY As Integer 0 Public
  • MongoDB:基于另一个集合从一个集合中进行条件选择

    我对 MongoDB 相当陌生 需要帮助根据另一个集合的数据对一个集合进行选择或某种左连接 我有两个集合 动物和膳食 我想获取在某个日期 假设是 20171001 之后上次注册膳食的动物 以确定该动物是否仍然活跃 collection an
  • 在 SQL Server 上的特定位置添加列?

    我想知道是否有办法在创建 SQL Server 表后将列添加到特定位置 Thanks 您可以在 Management Studio 中执行此操作 您可以通过在保存更改之前生成 SQL 脚本来检查完成此操作的方式 基本上是通过以下方式实现的
  • React JS - 如何在状态更新之前阻止渲染 [Hooks]

    我有一个从 API 获取数据以向用户显示一些详细信息的组件 const ItemDetail match gt const item setItem useState null useEffect gt const abort new Ab
  • 请求获取日历事件响应 404,前提是分配了权限并使用 Microsoft Graph API 获取了 accessToken

    我想构建一个具有获取其他人的日历事件功能的网络应用程序 我已经注册了该应用程序https apps dev microsoft com 并要求Calendars Read允许 我确信管理员已同意分配这些权限 我让他通过管理员同意页面来完成
  • Kotlin 中的静态方法和变量?

    我希望能够将类实例保存到私有 公共静态变量中 但我不知道如何在 Kotlin 中执行此操作 public class Foo private static Foo instance public Foo if instance null i
  • 在 C++ 中嵌入 python/numpy

    我正在尝试在我的 C 应用程序中使用 python 3 带有 numpy 这需要将 C 数组发送到 python 执行计算 然后在 C 中检索结果 为此 我基于此处讨论的代码 https codereview stackexchange c
  • istream类的运算符>>的“返回值”如何工作?

    我试图理解这句话 int main fstream inf ex txt ios in char c while inf gt gt c cout lt lt c lt lt return 0 什么是 inf gt gt c 在上面的 wh
  • npm install -g生成器角度给出错误(需要同行)

    学习Node并尝试安装generator angular running npm install g generator angular 警告 EPEER 无效 电子邮件受保护 需要一个同伴 Generator karma gt 0 9 0
  • 从表单中按顺序显示 CFloop 项目

    我在 form html 页面上有以下表单 它提交到 cfpage cfm 名字 姓氏 地址和年龄都会显示 但顺序不一致 有时它会显示姓氏 名字 地址和年龄 在另一种情况下 它可能显示地址 名字 年龄 然后是姓氏 如何显示 CFLoop 项
  • 如何从函数返回数组并循环遍历它?

    include
  • 不使用任何字符串函数在php中反转字符串

    在昨天的采访中 我被问到如何在不使用 strrev 或 strlen 等任何字符串函数的情况下反转字符串 我在网站上找到了这个示例 但它给出了错误 是否可以在不使用 strlen 的情况下执行此操作 未初始化的字符串偏移量 1 in D x
  • 使用 CSS 媒体查询检测屏幕宽度

    我猜是因为你可以使用媒体查询来做到这一点 media min width 500px 在某些时候 CSS 样式表必须知道屏幕的宽度 无需使用 Javascript 是这样吗 您可以使用device width这将测试屏幕的宽度 以 px 为
  • Woocommerce:以编程方式更新购物车中的商品

    我需要以编程方式动态更改购物车中商品的价格 我尝试过 Woocommerce 操作挂钩 购物车和会话对象的不同组合 但似乎没有任何效果 我认为这不会那么具有挑战性 add action woocommerce before calculat