基于 Woocommerce 中特定产品变化的购物车商品折扣

问题描述 投票:0回答:2

我在我的 DIY 销售商店里有一种名为“可重复使用湿”的产品,有不同的图案和不同的包装。

  • 5 可重复使用湿成本 €10
  • 10 可重复使用湿成本 €18

由于它们有很多不同的图案,客户可能想要 10 个湿的,但要拿两个不同的 5 个包装,以获得两种不同的图案。不幸的是,这会让他多花 2 欧元,我想避免这种情况。

我怎样才能检测到这种行为,更准确地说,我应该在哪里挂钩?

我想过将其放入购物车预览中,如果我检测到这些包裹,也许会自动添加折扣优惠券,但我不确定这是否是最有效的方法。

任何建议都会对我有帮助。

php woocommerce cart coupon discount
2个回答
3
投票

您的名为“可重复使用湿”的产品似乎是一种可变产品,根据某些产品属性具有多种变体。

因此,就您的情况而言,可以通过两种不同的方式应用折扣

但首先您需要在代码中定义“可重复使用湿”数量包中涉及的相关产品属性 SLUG 以及“5 件装”的相关术语 NAME 值。

如果没有以正确的方式完成此设置,代码将无法工作。

1) 更改相关商品价格 (最好的方法):

这里我们设置当购物车中有 2 件或更多相关商品时,折扣单价为

9
(
18 / 2 = 9
)

add_action( 'woocommerce_before_calculate_totals', 'conditionally_set_discounted_price', 30, 1 );
function conditionally_set_discounted_price( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE your product attribute slug for "Reusable wet" (without "pa_")
    $product_attr = 'reusable-wet';
    $product_attr = 'color';

    // HERE set the corresponding (value) term NAME for "5 Reusable wet"
    $term_slug = '5 reusable wet';
    $term_slug = 'Black';

    // HERE set the discounted price for each cart item with "5 Reusable wet" when they are 2 or more
    $discounted_price = 9; // (18 / 2 = 9)

    $five_rw_count = 0; // Initializing variable

    // 1st Loop: count cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $five_rw_count += $cart_item['quantity'];
        }
    }

    // Continue if there is at least 2 units of "5 Reusable wet"
    if( $five_rw_count < 2 ) return; // Exit

    // 2nd Loop: set the discounted price for cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $cart_item['data']->set_price($discounted_price); // Set the discounted price
        }
    }
}

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效


2)优惠券方式(由于许多逻辑原因不太方便)

您必须在此处设置优惠券代码。这个优惠券设置应该是这样的:

您将在“产品”字段中设置所有相关产品变体。

完成后,您将在以下代码中设置优惠券名称(小写):

add_action( 'woocommerce_before_calculate_totals', 'conditionally_auto_add_coupon', 30, 1 );
function conditionally_auto_add_coupon( $cart ) {
    if ( is_admin() && !defined('DOING_AJAX') ) return; // Exit

    // HERE your product attribute slug for "Reusable wet" (without "pa_")
    $product_attr = 'reusable-wet';

    // HERE set the corresponding (value) term NAME for "5 Reusable wet"
    $term_slug = '5 reusable wet';

    // HERE set the coupon code (in lowercase)
    $coupon_code = 'multiplefive';

    $five_rw_count = 0; // Initializing variable

    // 1st Loop: count cart items with "5 Reusable wet"
    foreach ( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_attribute( $product_attr ) == $term_slug ){
            $five_rw_count++; // Increasing count
        }
    }

    // Apply the coupon if there is at least 2 units of "5 Reusable wet"
    if ( ! $cart->has_discount( $coupon_code ) && $five_rw_count >= 2 ) {
        $cart->add_discount( $coupon_code );  
    } 
    // Remove the coupon if there is at less than 2 units of "5 Reusable wet"
    elseif  ( $cart->has_discount( $coupon_code ) && $five_rw_count < 2 ) {
        $cart->remove_coupon( $coupon_code );
    }
}

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效


相关:自动应用或删除 Woocommerce 购物车中特定产品 ID 的优惠券


0
投票

看起来很有希望!还在工作吗?

我想为特定品牌(属性)的每种产品额外设置 10%。这个片段可以吗?

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.