Как отключить способ доставки на основе количества товаров и определенной категории - PullRequest
1 голос
/ 08 мая 2020
• 1000

Под количеством товаров я не имею в виду количество, я имею в виду, сколько разных товаров в корзине. IE 2 лампы и 3 стола в корзине - это 2 предмета, а общее количество - 5.

Я также хотел бы убедиться, что это правило действует только для определенной категории.

Пробовал:

function hide_shipping_count_based( $rates, $package ) {

    // Set count variable
    $cart_count = 0;

    // Calculate cart's total
    foreach( WC()->cart->cart_contents as $key => $value) {
        $cart_count ++;
    }

    // only if the weight is over 150lbs find / remove specific carrier
    if( $cart_count > 2 ) {
        // loop through all of the available rates

        unset( $rates[ 'distance_rate' ] );
        unset( $rates[ 'table_rate' ] );

    }

    return $rates;
}

add_filter( 'woocommerce_package_rates', 'hide_shipping_count_based', 10, 2 );

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать следующее объяснение с комментариями, добавленными в код

Условия, которые должны быть выполнены в этом коде:

  • По крайней мере 3 позиции в корзине
  • 1 или несколько продуктов относятся к 'категори ie -1' категории
  • 'distance_rate' и / или 'table_rate' сбрасываются, если выполнены 2 предыдущих условия

function hide_shipping_count_based( $rates, $package ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // Count line items
    $count =  count( $package['contents'] );

    // Set variable
    $found = false;

    // Set term (category)
    $term = 'categorie-1';

    // Check count
    if( $count > 2 ) {

        // Loop through line items
        foreach( $package['contents'] as $line_item ) {
            // Get product id
            $product_id = $line_item['product_id'];

            // Check for category
            if ( has_term( $term, 'product_cat', $product_id ) ) {
                $found = true;
                break;
            }
        }
    }

    // True
    if ( $found ) {
        // Loop trough rates
        foreach ( $rates as $rate_key => $rate ) {
            // Targeting
            if ( in_array( $rate->method_id, array( 'distance_rate', 'table_rate' ) ) ) {
                unset( $rates[$rate_key] );
            }
        }
    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_count_based', 100, 2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...