Скрыть способы доставки, если корзина WooCommerce содержит комбинацию категорий товаров - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь отключить способ доставки (и разрешить только локальный самовывоз), если:

  • Корзина содержит только товары из указанной c категории.
  • Корзина содержит только элементы из указанной c комбинации категорий.

Я могу успешно заблокировать одну указанную c категорию, но как я могу расширить ее для / на комбинации категорий (если оператор не работает)? Спасибо тебе

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 );
}
...