Woocommerce 有条件地自动将产品添加到购物车

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

我正在运营一个销售两种产品的平台

  • 电子学习产品(可以单独购买)
  • 网络研讨会产品(必须在过去购买电子学习或与网络研讨会一起购买电子学习)

我需要实现一个功能,如果客户将网络研讨会产品添加到购物车,它应该检查用户是否已登录并且过去已经购买了电子学习产品。 如果是这样,他可能会继续购买网络研讨会作为独立产品。

如果没有,它也应该自动将其添加到购物车(因为必须同时购买两种产品)。

如果客户稍后再次从购物车中手动删除自动添加的产品,则应无法结账,并应显示一条错误消息,表明该特定产品只能与其他产品一起购买。

我已经搜索过插件,但现有的解决方案似乎都不能完全解决此任务,并且仅仅为了一个简单的 if 子句安装一个巨大的插件也可能不是存档它的正确方法。

我的 php 技能非常有限,所以我尝试使用伪代码:

添加到购物车: 如果客户将产品“网络研讨会”广告添加到购物车 检查产品“eLearning”是否也在购物车中或过去购买过 如果没有,请将产品“eLearning”添加到购物车

结账: 如果购物车中只有产品“网络研讨会”,但产品“电子学习”不存在并且过去也没有购买过,则显示自定义错误消息并禁用结帐按钮。

预先感谢您帮助我解决这个问题!

woocommerce checkout
2个回答
0
投票

这是我在一些项目中使用的解决方案。在这里我不会阻止结账按钮或其他不是 100% 防弹的解决方案。我只是强制从购物车中删除其他产品以再次添加它。当用户删除捆绑产品时,他可以删除附加产品。

function check_cart_for_bundle_product() {
    $bundle_product_id = 33; // Our bundle product 
    $additional_product = 16; // Our additional product which must be in the cart to complete
    
    $product_cart_id = WC()->cart->generate_cart_id( $bundle_product_id ); // Products in cart have unique ID
    $in_cart = WC()->cart->find_product_in_cart( $product_cart_id ); // We search in cart by this unique ID
    if($in_cart) {
        //If user is not customer we want to add this additional product
        if ( ! is_user_logged_in() ) {
            WC()->cart->add_to_cart( $additional_product );
        } else {
            //If current user is customer we want to check if he already purchased the additional product
            if ( !wc_customer_bought_product( '', get_current_user_id(), $additional_product ) ) {
                WC()->cart->add_to_cart( $additional_product );
            }
        }
    }
}
add_action('woocommerce_before_cart','check_cart_for_bundle_product');

0
投票

你成功了吗? 我需要一个类似的功能。

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