Woocommerce 购物车通知显示多次

2024-04-27

我有一个功能正常工作,除了它在购物车中显示通知两次而不是一次。该功能应用折扣并显示通知。该函数查找特定类别的商品并添加总数,如果满足折扣金额,则应用折扣并显示通知。现在,即使购物车中只有一件商品,它也会显示两次通知。

我尝试过添加wc_clear_notices()但这将清除我需要的其他通知,例如类别最小订单金额的最小最大通知。如果我添加wc_clear_notices()在函数的开头或任何 foreach 语句中,它会在显示之前清除其他最小/最大通知。

这是我已经看过的一些问题,但只是说使用wc_clear_notices()这不起作用,因为其他通知被清除:

WooCommerce 注意,仅运行一次 https://stackoverflow.com/questions/40405988/woocommerce-notice-run-only-once

仅显示一次 wc_add_notice https://stackoverflow.com/questions/43979665/show-wc-add-notice-only-one-time

这是我目前拥有的代码,可以正确地对商品进行折扣并显示通知,但显示通知两次而不是一次:

//apply discounts to foil and seal product categories
add_action( 'woocommerce_before_calculate_totals', 'cart_count_foil_seal_items',10,1);

function cart_count_foil_seal_items( $cart_object ) {
$seal_prod_tally = 0;
$foil_prod_tally = 0;
// Iterating through each item in cart
foreach ( $cart_object->get_cart() as $item_values ) {
    //  Get cart item data
    $item_id = $item_values['data']->get_id(); // Product ID
    $item_qty = $item_values['quantity']; // Item quantity

    // Getting the object
    $product = new WC_Product( $item_id );
    $prod_cat = wp_get_post_terms($product->get_id(),'product_cat',array('fields'=>'slugs'));

    //tally total
    if (in_array('seal-stickers', $prod_cat)){
        $seal_prod_tally += $item_qty;
    }else if(in_array('foil-badges', $prod_cat)){
        $foil_prod_tally += $item_qty;
    }
}

 foreach ( $cart_object->get_cart() as $item_values ) {

    //Get cart item data
    $item_id = $item_values['data']->get_id(); // Product ID
    $item_qty = $item_values['quantity']; // Item quantity

    // Getting the object
    $product = new WC_Product( $item_id );
    $prod_cat2 = wp_get_post_terms($product->get_id(),'product_cat',array('fields'=>'slugs'));        

    //apply discount to each item within category

      if (in_array('seal-stickers',$prod_cat2)){

        switch ($seal_prod_tally){
            case 20000:
                $item_values['data']->set_price(1327.01/20000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 20,000 at $1327.01.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            case 30000:
                $item_values['data']->set_price(1578.65/30000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 30,000 at $1578.65.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            case 40000:
                $item_values['data']->set_price(1853.05/40000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 40,000 at $1853.05.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            case 50000:
                $item_values['data']->set_price(2126.76/50000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 50,000 at $2126.76.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            case 60000:
                $item_values['data']->set_price(2405.98/60000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 60,000 at $2405.98.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            default:
                break;
        }        
    }else if (in_array( 'foil-badges',$prod_cat2)){
        switch ($foil_prod_tally){
            case 25000:
                $item_values['data']->set_price(5872.63/25000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 25,000 at $5872.63.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            case 50000:
                $item_values['data']->set_price(10815.47/50000);
                if(!is_checkout()){
                    wc_add_notice( 
                            sprintf( 'Quantity discount has been applied to item %s: 50,000 at $10815.47.', $item_values['data']->get_title()
                            ), 'notice' 
                    );
                }
                break;
            default:
                break;
        }            
    }      
 }

}

当客户使用“更新购物车”按钮更新购物车时会导致出现多个通知,因此快速解决方法就是在客户每次单击“更新购物车”按钮时清除通知。

最好从根源上解决问题,即找到一种不同的方式来显示通知而不重复,但在此之前这会达到预期的效果。

//clear notices on cart update
function clear_notices_on_cart_update() { 
    wc_clear_notices();
}; 

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

Woocommerce 购物车通知显示多次 的相关文章

  • angularjs路由,如何检查模板文件是否存在

    我在我的应用程序中使用 angularjs 一切都运行良好 但在加载模板之前我只想检查它是否确实存在于给定的路径上 这是我的代码 when page angularAMD route templateUrl function rp retu
  • PHP memcache - 检查池中是否有可用的服务器?

    我有以下代码 cluster local array host gt 192 168 1 1 port gt 11211 weight gt 50 cluster local2 array host gt 192 168 1 2 port
  • 我如何解决语义错误:“类没有名为..”的关联

    我正在关注 symblog symfony2 教程的第 5 部分 http tutorial symblog co uk docs customising the view more with twig html 标题下 主页 博客和评论
  • PHP 准备语句转义的清晰性

    我知道这是一个非常受欢迎的问题 并且已经研究了很多小时 我仍然对明确的答案有点不确定 我不是 PHP 专业人士 并且已经自学了一段时间 我最近刚刚了解 MYSQLi 准备好的语句 已经习惯了旧的做法 我的主要问题是试图找到关于在使用准备好的
  • 防止刷新时提交双重表单

    我有一个简单的问题 我知道当用户使用 Post Redirect Get 模式重新加载页面时 我可以防止表单重新提交自身 但我的问题是 如果我将用户重定向回提交表单的同一页面 这种模式是否有效 我的意思是 我不想将用户重定向到另一个页面 请
  • 如何制作自己的 while 循环,就像 WordPress 循环一样?

    我是新来的 也是 PHP 新手 只是想知道如何制作我自己的灵活循环 就像在 WordPress 中一样 注意我不是在谈论 wordpress 我想在我自己的 PHP 应用程序上实现它 我们回顾一下WP 有一段代码是这样的 while hav
  • 严格标准:在 wordpress/wp-includes/class-oembed.php 第 116 行中,仅应通过引用传递变量

    我已经查看了很多类似的问题 但关于我的代码 我没有得到它 错误 Strict Standards Only variables should be passed by reference in wordpress wp includes c
  • Codeigniter HMVC Ajax

    我的问题需要一些帮助 我有一个用户列表 我想在 CI HMVC 中使用 ajax 删除用户 onclick 删除按钮 这是我的列表视图的代码 function tip del click function var recId this da
  • PHP:测试三个变量是否相等

    我以前从未遇到过这种情况 但是如何测试三个变量是否相同 以下内容显然不起作用 但我想不出一种优雅 且正确 的方式来编写以下内容 if select above average select average select below aver
  • 从 MySQL 列创建 PHP 数组

    mysql fetch array会给我一个获取行的数组 从一列中所有行的值生成数组的最佳方法是什么 您可以循环遍历数组并创建一个新数组 如下所示 column array while row mysql fetch array info
  • html iframe 中的字符错误

    对不起我的英语我说西班牙语 我正在尝试显示多个php and mysql将在 iframe 内显示的注册 问题是 iframe 向我显示特殊字符的错误 例如 重音符号 感叹号等 D ndecuestamenosyseconsumem s 这
  • Google 站点地图日期格式

    我需要 php 中站点地图的日期格式 我怎样才能做到这一点 这个输出对吗
  • PHP 中的 Javascript“unes​​cape”

    我的图像主机有一个 Google Chrome 扩展程序 它会向我的网站发送一个 URL 该网址得到encoded通过 JavaScript 的escape method 编码的 URLescape看起来像这样 http 253A 4 bp
  • PHP 5 的 HTML 表单库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个QuickForm替代品 QF 存在性能问题 例如组合框中的许多选项 我还想要一些更面向对象的东西 比如 Zend Form
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • 如何通过 PEAR 安装旧版本的 PHPUnit?

    我想将 PHPUnit 3 4 的安装降级到 3 3 我只是不知道该怎么做 如何使用 PEAR 在 Ubuntu 上安装 PHPUnit 3 3 版本 您需要知道要降级到的确切版本号 在撰写本文时 您所使用的最后一个版本是 3 3 17 可
  • CakePHP 后退和前进按钮没有布局

    我们正在 CakePHP 中构建一个大型 CMS 并集成了 Croogo 安装 我们最近遇到了一个问题 当用户单击back在浏览器中 或forward按钮 您最终得到的是使用以下命令的视图 ctp 文件blank布局 所以没有样式 js 等
  • SO 日期计算和格式化

    SO 使用什么脚本来显示日期 因为它的格式和逻辑显示似乎相当不错 我不确定 StackOverflow 使用什么 但最常见的时间戳表示之一是 twitter 所做的 它将时间戳显示为a moment ago 30 seconds ago x
  • 计算网站上多个文件的下载次数的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 问题是 计算网站上多个文件的下载次数的最佳方法 我正在尝试做的事情 跟踪并统计多个文件的下载数量 对于具有不同扩展名的文件 foo z
  • 'SQLSTATE[HY093]:参数数量无效:绑定变量的数量与令牌数量不匹配'[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到 SQLSTATE HY093 的错误 参数编号无效 绑定变量的数量与标记的数量不匹配 if isset POST cada

随机推荐

  • 将字符串转换为个位数并求和

    我花了几个小时尝试寻找解决方案来完成我认为很简单的任务 但我失败了 我有一个由 3 个不同字符组成的字符串 I R O 长度从 1 到 6 E g IRRROO RRORRR IIR RIRRO 每个字符代表一个数字I 1 R 2 O 3我
  • 什么是 NullPointerException,如何修复它?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 什么是空指针异常 java lang NullPointerException 以及是什
  • Prolog 匹配 vs miniKanren 统一

    在 Prolog 人工智能编程中 Bratko 在第 58 页说了以下内容 Prolog 中的匹配对应于逻辑中所谓的统一 但是 我们避免使用 统一 这个词 因为出于效率原因 在大多数 Prolog 系统中 匹配的实现方式并不完全对应于统一
  • onDetach 当片段时调用

    我在方向改变后显示相同的片段时遇到问题 我将其放入后台并弹出 它跳转到onCreateView等 但随后它调用onDetach 这导致显示错误的片段 代码如下 fragment public View onCreateView Layout
  • 如何将 JEditorPane 插入 JTable 单元格?

    我想将 JEditorPane 放入 JTable 单元格中 我写过这个 jTabel1 setDefaultRenderer String class new StringEditorPane class StringEditorPane
  • NaN 是关联容器的有效键值吗?

    考虑 C 中的有序和无序关联容器double Is NaN有效的密钥类型 对于有序容器 我应该说 不 因为它不尊重严格的弱排序 对于无序的容器 我不知道 以下是 GCC 4 6 2 中发生的情况 include
  • 正则表达式匹配不在数组中的逗号(用方括号括起来)

    我有一个对象 想将其表示为带有一些附加格式的字符串 这是我的代码 stringify object and remove double quotations let outPut JSON stringify myObject replac
  • 执行 grails/groovy 时,Linux 上没有可用的控制台输出

    当执行 groovy 脚本或 grails 应用程序时 没有可用的输出 输入 gt 只有一个清晰的控制台屏幕 即使不启动 X Window System 输出也是不可见的 我也尝试过 grailscompile plain output 也
  • 如何在不使用 SPLITSHARD 的情况下动态向 SolrCloud 添加节点?

    我已经设置了Solr云有 4 个碎片 我向 SolrCloud 添加了 8 个节点 4 个领导者和 4 个副本 每个节点运行在不同的机器上 但后来我发现我的数据越来越多 每天400万文件 这样我的 4 个分片就不够用了 因此 我想动态地向该
  • Python-docx:是否可以在特定位置(而不是末尾)向段落添加新的运行

    我想为 MS Word 文本中更正的单词设置样式 由于无法更改运行中的文本样式 因此我想在现有段落中插入具有新样式的新运行 for p in document paragraphs for run in p runs if text in
  • Spring Boot + 安全 + 多 HTTP Web 配置

    我正在尝试使用 spring boot 和 spring security 来做一个示例 我的想法是创建一个网络应用程序并提供一个API 我希望两者都有安全性 所以我需要创建一个多 http Web 安全配置 但它不起作用 我点击了这个链接
  • 自定义 ImageView 导致程序崩溃

    我正在为 Android 制作一个小型应用程序 其中有一个relativelayout 其中包含一个自定义 ImageView 在我的 Java 代码中 我有这个类 package com example android helloacti
  • 德尔福XE5安卓。硬件后退按钮按下

    如何模拟硬件后退按钮按下来关闭应用程序 我需要通过代码关闭应用程序 但 Application Terminate Close Hide 和 DisposeOf 不起作用 所以我想到模拟硬件后退按钮按下来实现我的目标 IFDEF ANDRO
  • 将来自另一个表的每行作为数组连接起来

    我正在使用 PHP 为自己编写一个电影存档脚本 我正在从 IMDb 获取电影信息并将其添加到我的数据库中 我正在使用另一个名为 链接 的表添加我选择的电影的链接 这是我用来从数据库获取电影的查询 movies this gt db gt q
  • 通过google地图获取我当前位置10公里半径范围内所有位置的纬度和经度(使用PHP)

    我对谷歌地图很陌生 我有一个表格 其中列出了所有位置 超级商店的位置 及其纬度和经度 现在我想知道这些超级商店在我当前位置 10 公里半径范围内的所有可能位置 可能是纬度和经度 我不知道如何使用 Google 地图 在 php 代码中 来做
  • F#、FParsec 和递归调用流解析器(第二次)

    感谢您的回复我的第一篇文章 https stackoverflow com questions 26853718 f fparsec and calling a stream parser recursively and 我的第二篇文章 h
  • 使用python向docx文件添加标头

    我有数百个 Word 文档 需要为其添加特定页眉 如典型的 MS Word 页眉 页脚 并不是说需要修改标题 只是这些文档不包含标题 有没有办法使用 Python docx 模块来做到这一点 我最近发现了它 它看起来很有希望 如果用户没有
  • 在具有分层索引的 pandas 数据框中使用 iloc 时出现问题

    每当我尝试向具有分层索引的数据帧上的 iloc 提供列表时 我都会收到此 ValueError 我不确定我是否做错了什么或者这是否是一个错误 我在使用 iloc 时没有遇到任何问题 就像使用非分层索引一样 这是使用 Pandas 0 12
  • svg xmlns 属性值是否需要协议?可以是 https 或相对的吗?

  • Woocommerce 购物车通知显示多次

    我有一个功能正常工作 除了它在购物车中显示通知两次而不是一次 该功能应用折扣并显示通知 该函数查找特定类别的商品并添加总数 如果满足折扣金额 则应用折扣并显示通知 现在 即使购物车中只有一件商品 它也会显示两次通知 我尝试过添加wc cle