删除购物车中单独存在特定产品时的 WooCommerce 结账条款和条件

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

我在 https://development.pittsburghconcertsociety.org 上出售活动门票并接受捐款。当有人买票时,他们必须同意新冠肺炎政策。但是,当有人“购买”捐赠时,即他们仅将捐赠产品放入购物车时,他们不需要同意新冠病毒政策。 woo 支持聊天机器人吐出了这段代码,但它不起作用:

function hide_terms_for_specific_product( $woocommerce_checkout_fields ) {
    // Check if the specific product is the only item in the cart
    if ( WC()->cart ) {
        $cart_items = WC()->cart->get_cart();
        $specific_product_found = false;

        foreach ( $cart_items as $cart_item ) {
            // Replace '123' with the ID of the specific product
            if ( $cart_item['product_id'] == 551 ) {
                $specific_product_found = true;
                break;
            }
        }

        // Hide terms and conditions for the specific product
        if ( $specific_product_found ) {
            unset( $woocommerce_checkout_fields['terms'] );
        }
    }

    return $woocommerce_checkout_fields;
}
add_filter( 'woocommerce_checkout_fields', 'hide_terms_for_specific_product' );

(捐赠产品 ID 551)。总而言之,如果捐赠与门票一起在购物车中,我确实需要 T&C 复选框/要求,但如果捐赠是购物车中的唯一项目,则不需要。在这种情况下,仅仅隐藏条款和条件是不够的;也不需要。

Gravy:能够添加多个产品 ID,以防我们出售商品。

php wordpress woocommerce cart checkout
1个回答
0
投票

您没有使用正确的挂钩。当购物车中只有特定产品时,以下内容将完全删除条款和条件:

add_filter( 'woocommerce_checkout_show_terms', 'remove_terms_and_conditions_for_specific_unique_item' );
function remove_terms_and_conditions_for_specific_unique_item( $show_terms ) {
    // Replace "123" with the desired product ID
    $targeted_id = 123;
    $cart_items = WC()->cart->get_cart(); // get cart items

    // Check if there is only one item in cart
    if( count($cart_items) > 1 ) {
        return $show_terms;
    }        
    // Check if the targeted product ID is the only item in cart
    if ( reset($cart_items)['product_id'] == $targeted_id ) {
        return false; // Remove terms and conditions field
    }
    return $show_terms;
}

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

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