Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 优惠券,根据Woocommerce中的产品类别提供2种不同百分比的折扣_Php_Wordpress_Woocommerce_Custom Taxonomy_Coupon - Fatal编程技术网

Php 优惠券,根据Woocommerce中的产品类别提供2种不同百分比的折扣

Php 优惠券,根据Woocommerce中的产品类别提供2种不同百分比的折扣,php,wordpress,woocommerce,custom-taxonomy,coupon,Php,Wordpress,Woocommerce,Custom Taxonomy,Coupon,我正在寻找一个商业挂钩,将有助于改变折扣率的基础上2个不同的产品类别的限制,当一个特定的优惠券应用 例如,如果客户添加特定优惠券,我希望: 如果购物车项目来自产品类别a,则该项目将提供10%的折扣 如果是B类产品,该商品将有20%的折扣 更新购物车总价格 是否有任何可用的钩子来实现这一点?有可用的行动钩或过滤器钩吗 这是我目前的代码: add_filter( 'woocommerce_get_discounted_price', 'apply_coupon', 10); function app

我正在寻找一个商业挂钩,将有助于改变折扣率的基础上2个不同的产品类别的限制,当一个特定的优惠券应用

例如,如果客户添加特定优惠券,我希望:

  • 如果购物车项目来自产品类别a,则该项目将提供10%的折扣
  • 如果是B类产品,该商品将有20%的折扣
  • 更新购物车总价格
  • 是否有任何可用的钩子来实现这一点?有可用的行动钩或过滤器钩吗

    这是我目前的代码:

    add_filter( 'woocommerce_get_discounted_price', 'apply_coupon', 10);
    function apply_coupon($price) {
         global $woocommerce;
         $product=$woocommerce->cart->product;
         if(has_term( 'duplex-blinds', 'A' ,$product->id)){
           get_product_cart_price; 
          10% DISCOUNT
         }
         if(has_term( 'duplex-blinds', 'A' ,$product->id)){
          20% DISCOUNT
         }
         upadte total_discunt_incart($new_discount);
         upadte new_price_in_cart($new_price);
         upadte new_price_in_checkout($new_price);
      return $price;
    }
    
    重要的是我需要修改购物车总价格结帐总价格、总折扣价格和需要发送到贝宝的折扣价格

    我的商店有很多钩子,这就是为什么woo commerce默认优惠券计算出错的原因。我注意到,购物车页面中的折扣价格是基于定制产品的价值而来的,但它不会从原始购物车金额中更新,因此总价格保持不变


    但在结账页面,折扣价格是基于产品原价而非产品定制价计算的,因此折扣是错误的,而且它也不是从总价中最小化的

    以下是一种完全不同的方法来实现这一点……此回答代码将启用一个优惠券代码,该代码基于两种特定的产品类别具有两种不同的折扣百分比

    比如说,您的相关产品类别是:

    • 对于10%的优惠券折扣,产品类别slug将为
      “连帽衫”
    • 对于20%的优惠券折扣,产品类别slug将为
      't-SHERTS'
    (您可以在代码中使用产品类别ID、slug或名称)

    这需要两个步骤:

  • 优惠券设置(正确设置优惠券代码):
    • 折扣类型:
      百分比
    • 金额:
      10
    • 限制>产品类别(显示名称):“连帽衫”和“T恤”
    • 如果需要,您可以使用其他设置
  • 代码功能内的设置:
    • 优惠券代码:将优惠券代码设置为小写
    • 't-shirts'
      产品类别slug(折扣20%)

  • 下面是代码(您将在其中添加设置):

    代码进入活动子主题(或活动主题)的function.php文件。测试和工作


    下面是一个演示的实际工作示例(带有屏幕截图):

    • 第一个购物车项目(来自“连帽衫”产品类别)获得10%的折扣
      $40 x 10%=$4
    • 第二个购物车项目(来自“t恤衫”产品类别)可获得20%的折扣
      $30 x 20%=$6

    因此,总折扣是
    $4+$6=$10
    …这很有效

    I使用此代码,但它在20%类别中给出100%,但是如果将0.2更改为0.02,则您提供的代码确实有效

    $second\u百分比=0.2;//20%

    也要改变:
    $second\u百分比=0.02;//20%

    或:
    $second\u百分比=0.015;//15%

    如果您需要15%的折扣

    我可以建议您修改吗<代码>$折扣=(浮动)$优惠券->获取金额()*(2*$折扣金额/100)是一种非常奇怪的编写方式。只需编写
    $discount=$discounting\u amount*0.2
    ,它将使折扣更为明显20%。。在这里,你基本上是将产品价值乘以2,得到20%的回扣,这在我看来有点复杂。干杯,谢谢你的解决方案@Florianseginger之所以这样写,是因为这个社区有初学者……所以你当然可以使用
    $折扣=(浮动)$coupon->get_amount()*$折扣_amount*0.2
    ,因为你还需要
    $coupon->get_amount()
    add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 20, 5 );
    function alter_shop_coupon_data( $round, $discounting_amount, $cart_item, $single, $coupon ){
    
        ## ---- Your settings ---- ##
    
        // Related coupons codes to be defined in this array (you can set many)
        $coupon_codes = array('10percent');
    
        // Product categories at 20% (IDs, Slugs or Names)  for 20% of discount
        $product_category20 = array('hoodies'); // for 20% discount
    
        $second_percentage = 0.2; // 20 %
    
        ## ---- The code: Changing the percentage to 20% for specific a product category ---- ##
    
        if ( $coupon->is_type('percent') && in_array( $coupon->get_code(), $coupon_codes ) ) {
            if( has_term( $product_category20, 'product_cat', $cart_item['product_id'] ) ){
                $original_coupon_amount = (float) $coupon->get_amount();
                $discount = $original_coupon_amount * $second_percentage * $discounting_amount;
                $round = round( min( $discount, $discounting_amount ), wc_get_rounding_precision() );
            }
        }
        return $round;
    }