Изменить класс доставки в зависимости от цены класса доставки в корзине в Woocommerce - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно удалить класс доставки, если сумма в корзине этого класса доставки превышает или равна 150 долларам. Я нашел в этой ссылке Изменение класса доставки на основе количества классов доставки в корзине в Woocommerce

// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_classes', 30, 1 );
function change_change_shipping_classes( $cart ) {
    if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;


    // HERE define your shipping class SLUG
    $mailbox_shipping_class = 'STOCK';

    $mailbox_count = $item_price = $item_qty = 0;
    $found = false;


    foreach( WC()->cart->get_cart() as $cart_item ){
        $item_shipping_class_id = $cart_item['data']->get_shipping_class_id();

        if( in_array( $item_shipping_class_id, $class ) ){
            $found = true;  /* Target shipping class found */
            $item_price += $cart_item['data']->get_price(); /* Sum line item prices that have target shipping class */
            $item_qty += $cart_item['quantity']; /* Sum line item prices that have target shipping class */
            $item_total = $item_price * $item_qty; /* Get total for all products with same shipping class (There might be a better way to get this total) */
        } 
    }

    if( $found ) { 
        if ( $item_total >=150) {

            $cart_item['data']->set_shipping_class_id('0');
        }
    }
}

Мне нужно, чтобы вместо количества предметов из класса доставки я использовал Всего в корзине в долларах от класса доставки. Спасибо

1 Ответ

0 голосов
/ 27 апреля 2020
// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_classes', 30, 1 );
function change_change_shipping_classes( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    /* HERE define your shipping class to find */
    $class = array(930);


    /* Checking in cart items */
    $found = false;
    $item_price = $item_qty = 0;
    foreach( WC()->cart->get_cart() as $cart_item ){
        $item_shipping_class_id = $cart_item['data']->get_shipping_class_id();

        if( in_array( $item_shipping_class_id, $class ) ){
            $found = true;  /* Target shipping class found */
            $item_price += $cart_item['data']->get_price(); /* Sum line item prices that have target shipping class */
            $item_qty += $cart_item['quantity']; /* Sum line item prices that have target shipping class */
            $item_total = $item_price * $item_qty; /* Get total for all products with same shipping class (There might be a better way to get this total) */
        } 
    }

    if( $found ) {
        if( $item_total >= 150 ) {

            $cart_item['data']->set_shipping_class_id('932');
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...