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

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

05.07.2020

577

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

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 присваивает заказам определенные статусы в зависимости от отплаты и формирования заказа. Существует 7 различных статусов заказа: В ожидании оплаты (Pending payment) Обработка (Processing) На удержании Читать далее »

Массовое изменение цен

Массовое изменение цен

Смотрим какие есть решения для массового изменения цен товаров Woocommerce. В данной статье центральное внимание направлено именно на изменение цены, а не на изменение различных свойств товара. Плагин WooCommerce Prices Читать далее »

Исчезающие сообщения woocommerce

Исчезающие сообщения woocommerce

У woocommerce есть встроенная система сообщений: при добавлении товара в корзину, при удалении товара из корзины, при различных ошибках. Но они появляются перед основным контентом, нарушая исходную верстку. Сделаем их Читать далее »

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

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

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