/ Плагины / Изменение методов доставки в зависимости от условий

Изменение методов доставки в зависимости от условий

HIT

05.07.2020

1317

При оформлении товара мы можем задавать условия для вывода методов доставки, а также менять их стоимость.

add_filter('woocommerce_package_rates','test_overwrite_fedex', 100, 2);
function test_overwrite_fedex($rates, $package) {
	
	if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;
	
	global $woocommerce;
	$cart_subtotal = floatval( preg_replace( '#[^\d.]#', '', $woocommerce->cart->get_cart_total() ) );

	foreach ($rates as $rate) {

		if ($rate->id == 'flat_rate:14') { 
			if ($cart_subtotal >= 1000) { 
				$rate->cost = 0; 
			}
		}
		
		if ($rate->id == 'flat_rate:15') { 
			if ($cart_subtotal >= 5000) { 
				$rate->cost = 0; 
			}
		}		
		
		/*if ($rate->id == 'free_shipping:11') { 
			unset($rates['free_shipping:11']);
		}*/
		
	}

	return $rates;
}

В данном примере при достижении сумм 1000 и 5000 методы доставки становятся бесплатными. Закомментирован код в котором отключается метод доставки.

Можно также создать условие в зависимости от состава корзины, т.е. содержится ли в ней определенный товар:

add_filter('woocommerce_package_rates', 'product_hide_shipping_method', 10, 2);
function product_hide_shipping_method( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    // HERE set your Shipping Method ID to be removed
    $shipping_method_id = 'flat_rate:12';

    // HERE set your targeted product ID
    $product_id = 37;

    $found = false;

    // Loop through cart items and checking for the specific product ID
    foreach( $package['contents'] as $cart_item ) {
        if( $cart_item['data']->get_id() == $product_id )
            $found = true;
    }

    if( $found ){
        // Loop through available shipping methods
        foreach ( $rates as $rate_key => $rate ){
            // Remove the specific shipping method
            if( $shipping_method_id === $rate->id  )
                unset($rates[$rate->id]);
        }
    }
    return $rates;
}

Если у товара (из заказа) содержится определенный класс доставки

add_filter( 'woocommerce_package_rates', 'njengah_filter_shipping_methods', 10, 2 );
function njengah_filter_shipping_methods( $rates, $package ) {
	
	$found = false;
	
	foreach( $package['contents'] as $cart_item ) {
        if( $cart_item['data']->get_shipping_class() == 'luxmobily' )
            $found = true;
    }	
	
    if( $found ){
        foreach ( $rates as $rate_key => $rate ){
            unset( $rates['free_shipping:1'] );
			unset( $rates['local_pickup:2'] );	
        }
    }
	
	return $rates;

}

luxmobily — кастомный класс доставки, который должен содержаться хотя бы в одном товаре для выполнения условия.

Изменение методов доставки в зависимости от выбранной области (зоны) описан здесь.

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Изменение формы выбора вариаций

Изменение формы выбора вариаций

По умолчанию вариации товара в Woocommerce выбираются из выпадающего списка. Это не всегда удобно. Доработать формы выбора вариаций в виде: изображений, цветов, надписей (лэйблов) и т.д. помогут плагины. Рассмотрим различные Читать далее »

/
Woocommerce основы

Woocommerce основы

Наиболее часто встречающиеся и необходимые вызовы при использовании плагина woocommerce, а так же прочие хитрости при работе с woocommerce. <?php echo $_product->get_sku( $cart_item ); ?> // Вывести артикул в корзине Читать далее »

Фильтры Woocommerce

Фильтры Woocommerce

В базовую комплектацию Woocommerce входит набор виджетов для фильтрации товаров. Но данные виджеты необходимо несколько доработать. WooCommerce Навигация по слоям В этом виджете необходимо задать атрибут товара по которому будет Читать далее »

/ /

Добавить комментарий

Пока нет комментариев. Будь первым!

Изменение методов доставки в зависимости от условий
Кастомный метод платежа
Рекомендации для васКастомный метод платежаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.