Php 我如何为WordPress编写一个webhook,允许我使用一个优惠券代码进行两次单独的折扣?

Php 我如何为WordPress编写一个webhook,允许我使用一个优惠券代码进行两次单独的折扣?,php,wordpress,woocommerce,hook,webhooks,Php,Wordpress,Woocommerce,Hook,Webhooks,我有一个客户想为WordPress/WooCommerce结账添加优惠券。通常我只需进入WooCommerce>优惠券并创建优惠券 然而,他们想要一个优惠券代码为两种不同的产品提供产品折扣。本例中的产品为入场券 优惠券代码名称为=“COUPON1” “产品A”在工作日为15.95美元(产品ID=2846) 周末“产品A”为17.95美元(产品ID=2848) “产品B”在工作日为10.95美元(产品ID=2847) 周末“产品B”的价格为12.95美元(产品ID=2849) 产品A工作日和周末

我有一个客户想为WordPress/WooCommerce结账添加优惠券。通常我只需进入WooCommerce>优惠券并创建优惠券

然而,他们想要一个优惠券代码为两种不同的产品提供产品折扣。本例中的产品为入场券

  • 优惠券代码名称为=“COUPON1”
  • “产品A”在工作日为15.95美元(产品ID=2846)
  • 周末“产品A”为17.95美元(产品ID=2848)
  • “产品B”在工作日为10.95美元(产品ID=2847)
  • 周末“产品B”的价格为12.95美元(产品ID=2849)
  • 产品A工作日和周末票的折扣均为11.95美元
  • 产品B的折扣是8.95美元的工作日和周末票
工作流程:

  • 用户将产品A的1张票据添加到购物车
  • 用户将产品B的1张票据添加到购物车
  • 用户在折扣字段中输入优惠券耦合1
  • WordPress hook通过其ID在购物车中注意到这些产品,并注意到已应用优惠券耦合1
  • WordPress为产品A和B创建折扣价格
  • 小计现在显示11.95美元+8.95美元=20.90美元
  • 我可以为15.95美元的周末和工作日门票创建一个优惠券代码,但不能应用于第二个产品(产品B)

    如果使用优惠券,并且购物车中有任何产品ID 2846或2848,则应使用$11.95的折扣

    如果使用优惠券,并且购物车中有任何产品ID 2847或2849,则应使用8.95美元的折扣

    我想可能有一个webhook可以为我编写


    提前谢谢。

    我不认为一个优惠券代码就可以做到这一点。起初,我以为你需要一个工作日和周末的优惠券代码来自动更改,但要为两种不同的产品提供不同的折扣是不可能的

    您可以做的是动态地添加第二张优惠券。在后端有一张只控制产品B的“秘密”优惠券(使用优惠券限制-选择仅受影响的产品B)

    然后每次产品B进入购物车时动态添加和调整优惠券:

    define('PRODUCT_B_ID', 2487);
    add_filter( 'woocommerce_add_to_cart_handler', 'apply_secret_coupon', 50, 2);
    
    function apply_secret_coupon($product_type, $product){
        if ($product->get_id() == PRODUCT_B_ID){
            $calculated_discount_amount = 15.22;
            $secret_coupon     = new WC_Coupon('MySecretCoupon');
            $secret_coupon->set_amount($calculated_discount_amount);
            $secret_coupon->save();
            WC()->cart->apply_coupon('MySecretCoupon');
        }
     return $product_type;
    }
    

    我注意到您使用的产品ID很少。如果您根据自己的需要修改此代码,它可以为您提供一个解决方案。

    以下是我所做的,以防将来有人想这样做:

  • 在WooCommerce>优惠券中创建优惠券,将其分配给4 产品与这张优惠券挂钩,但折扣为0美元。这 优惠券将在下一步触发
  • 在WC定价和折扣插件>“购物车折扣”选项卡中,为每个产品创建一个规则,每个项目有固定折扣,将该规则分配给单个产品(即产品ID=2846为$4折扣),并为其提供优惠券应用=COUPON1的条件
  • 对每个产品ID执行相同的操作
  • 在购物车中,当应用优惠券时,它将显示带有优惠券名称的行,所以我只是使用CSS显示隐藏了该行:对于class.tuople-COUPON1没有
  • 确保在购物车折扣选项卡中启用了应用所有适用规则
  • 现在,每个行规则都显示了这些产品在购物车中的时间,为了更好地对行进行样式化,我在规则标题中添加了一个中断标记(即优惠券:COUPON1[br]折扣,适用于产品2846),然后使用CSS添加了行高:1.75em到class.cart折扣

  • 你可以用一个插件来建立这样的结构。你知道这样的插件吗?我有很多WooCommerce插件,它们总是为新的附加组件收费。所以我打赌这会奏效,但我今天又尝试了一次,并且能够利用WooCommerce的定价和折扣插件。我给自己发了一封回复,回复/描述更长。听起来不错。确保流程一直正常运行(检查发送的电子邮件以确保折扣看起来正常)。伟大的解决方案!