如果WooCommerce购物车包含产品类别的组合,则隐藏运输方式

时间:2020-01-24 14:51:44

标签: php woocommerce cart

在以下情况下,我试图禁用送货方式(仅允许本地取货)

  • 购物车仅包含特定类别的商品。
  • 购物车仅包含来自特定类别组合的项目。

我可以成功地阻止一个特定类别,但是如何针对类别组合扩展该类别(如果语句不起作用)? 谢谢你

add_filter( 'woocommerce_package_rates', 'acessory_hide_shipping_methods', 90, 2 );
function acessory_hide_shipping_methods( $rates, $package ){

    $category = 'acessory';
    $product_cat = get_term_by( 'slug', $category, 'product_cat' );

    $rates_arr = array();
    if ( wp_is_category_alone_in_cart( $category ) && ! WC()->cart->is_empty() )  {
        foreach($rates as $rate_id => $rate) { 
            if ('local_pickup' === $rate->method_id) {
                $rates_arr[ $rate_id ] = $rate;
            }
        }
    }
    return !empty( $rates_arr ) ? $rates_arr : $rates;
}

function wp_is_category_alone_in_cart( $category ) {

    $category_checks = array();

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

        $product        = $cart_item['data'];
        $product_in_cat = has_term( $category, 'product_cat', $product->get_id() );

        array_push( $category_checks, $product_in_cat );
    }

    return ! in_array( false, $category_checks, true );
}

0 个答案:

没有答案