当前位置: 首页 > 知识库问答 >
问题:

折扣金额不适用于woocommerce\u优惠券\u获取\u折扣\u金额

盖雪峰
2023-03-14

如果使用我的优惠券类型,我将尝试折扣购物车中最便宜的商品:

add_filter('woocommerce_coupon_get_discount_amount', 'wc_cpn_disc', 10, 5);
function wc_cpn_disc($discount, $discounting_amount, $cart_item, $single, $coupon) {
    // IF TYPE MATCHES PERFORM CUSTOM CALCULATION
    if ($coupon->type == 'cheapest_free'){
      global $woocommerce;
      foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
          $_product = $values['data'];
          $product_price[] = get_option('woocommerce_tax_display_cart') == 'excl' ? $_product->get_price_excluding_tax() : $_product->get_price_including_tax(); /*Store all product price from cart items in Array */
      }
      $lowestprice = min($product_price);
      $discount = number_format((float)$lowestprice/10,2,'.','');
    }

    return $discount;
}

折扣金额非常奇怪-无论我怎么尝试,它都不会达到我期望的价值。起初我以为这是一个百分比折扣,但我希望这是一个固定的数额。我试着在网站的其他地方运行我的“获取最低价格”功能,当最低值项为11.95时,它返回1.195,所以我知道该部分工作正常。但是265.60的总折扣是23.90——我就是不明白!

我只想在购物车里买到最低价的商品,并打折。

共有1个答案

谷梁宁
2023-03-14

在博斯曼和其他几个线程的帮助下,我成功地解决了这个问题。事实证明,我需要更改我的方法-下面是完整的代码。

add_filter('woocommerce_coupon_get_discount_amount', 'tfcc_cheapest_free', 10, 5);
function tfcc_cheapest_free($discount, $discounting_amount, $cart_item, $single, $coupon) {
    // IF TYPE MATCHES PERFORM CUSTOM CALCULATION
    if ($coupon->type == 'cheapest_free'){

      $items_prices = [];
          $items_count  = 0;

          // Loop through cart items
          foreach( WC()->cart->get_cart() as $key => $item ){
              // Get the cart item price (the product price)
              if ( wc_prices_include_tax() ) {
                  $price = wc_get_price_including_tax( $item['data'] );
              } else {
                  $price = wc_get_price_excluding_tax( $item['data'] );
              }

              if ( $price > 0 ){
                  $items_prices[$key] = $price;
                  $items_count       += $item['quantity'];
              }
          }

          // Only when there is more than one item in cart
          if ( $items_count > 1 ) {
              asort($items_prices);  // Sorting prices from lowest to highest

              $item_keys = array_keys($items_prices);
              $item_key  = reset($item_keys); // Get current cart item key

              // Targeting only the current cart item that has the lowest price
              if ( $cart_item['key'] == $item_key ) {
                  return reset($items_prices)/$cart_item['quantity']; // return the lowest item price as a discount
              }
          } else {
              return 0;
          }

    }

}

我希望这能帮助将来需要类似功能的人。

 类似资料:
  • 我已经创建了一个索引。MAMP中的php页面。 我的索引。php的读取方式与下面的完全相同。我通过localhost:8888访问它。 然而,它并没有像我相信的那样从这个页面返回html源代码,而是返回http://stackoverflow.com 作为一个常规网页,就像你现在看到的网页一样。 我的MAMP使用PHP 5.5.10。user_agent,allow_url_fopen。 我很困惑

  • 我试图在wp_woocommerce_order_itemmeta表中创建自定义元数据。但是要创建我想存储为元数据的数据,我需要知道在WooCommerce钩子woocommerce_checkout_create_order_line_item上创建的订单项的product_id。 我已经成功地用会话变量的值创建了一个元记录,但是当我试图获取订单项目的产品id时,我的代码失败了。我非常希望能找到

  • 需要向订单项目添加自定义元。谷歌搜索了它,大多数文章说使用“woocommerce\u add\u order\u item\u meta”钩子。最新版本2.3中不推荐使用此挂钩。有人,请告诉我该用哪个钩子代替。 http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html

  • PHP/Apache2中的文件获取内容是从Facebook获取用户图片。直到最近,它一直运转良好。现在,它总是在一分钟后超时,在我的Apache2 error.log中有以下错误: PHP警告:文件\u获取\u内容(https://graph.facebook.com/999999999/picture?width=200):无法打开流:连接超时 下面是代码(我最近添加了$context以查看它是

  • 我正在与CheckMarx漏洞之一作斗争。我需要一些指导来支持这一点。以下是我的代码: 这里con是(HttpurlConnection)新URL(“一些URL”)。openConnection()。 所以,checkmarx在《in》中强调了这个问题。readLine()。 我尝试的变通方法: 1: StringEscape eUtils.unescapeJson(in.readLine()),

  • Elasticsearch中的新search_as_you_type数据类型和标记器类型edge_ngram有什么区别?在构建即用型搜索引擎时更喜欢哪一个? Elasticsearch的文档提供了两种实现: search\u as\u you\u type数据类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/sea