避免在Woocommerce中为特定国家/地区的特定产品结帐

时间:2018-11-16 22:45:46

标签: php wordpress woocommerce cart country

这就是我想要做的:
如果客户选择加拿大作为发货国,并且购物车中有特定产品,则不应进行结帐,并且应显示一条错误消息,告知客户未进行结帐的原因。

我的研究
Add or remove woocommerce error messages具有生成WooCommerce错误消息的代码。昨天我问了一个问题,该代码为我提供了代码,以检查某些产品是否在购物车中,以及运送国家/地区是否设置为加拿大Remove Canada from country list when specific products are in cart on Woocommerce,我不确定我必须将代码挂接到哪个过滤器/操作,以便它在“点击“订单”。

更新: 因此,我尝试将我在我的研究中列出的两个代码结合起来,但是没有用。如果我需要以不同的方式来解决问题,将非常感谢
产品ID为15631和12616

1 个答案:

答案 0 :(得分:1)

这可以通过以下自定义功能使用动作挂钩woocommerce_check_cart_items完成:

add_action( 'woocommerce_check_cart_items', 'products_not_shipable_in_canada' );
function products_not_shipable_in_canada() {
    // Only on checkout page (allowing customer to change the country in cart shipping calculator)
    if( ! is_checkout() ) return;

    // Set your products
    $products = array(15631, 12616);

    // Get customer country
    $country = WC()->session->get('customer')['shipping_country'];
    if( empty($country) ){
        $country = WC()->session->get('customer')['billing_country'];
    }
    // For CANADA
    if( $country == 'CA' ){
        // Loop through cart items
        foreach( WC()->cart->get_cart() as $item ){
            // IF product is in cart
            if( in_array( $item['product_id'], $products ) ){
                // Avoid checkout and display an error notice
                wc_add_notice( sprintf( 
                    __("The product %s can't be shipped to Canada, sorry.", "woocommerce" ),  
                    '"' . $item['data']->get_name() . '"'
                ), 'error' );
                break; // Stop the loop
            }
        }
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

enter image description here

相关:Set minimum allowed weight for a specific country in WooCommerce