Skip to content

Instantly share code, notes, and snippets.

@kalbac
Last active December 22, 2022 21:27
Show Gist options
  • Select an option

  • Save kalbac/a159e1be6831df624516e52b50201892 to your computer and use it in GitHub Desktop.

Select an option

Save kalbac/a159e1be6831df624516e52b50201892 to your computer and use it in GitHub Desktop.
Делаем стоимость доставки СДЭК бесплатной при использовании купона
<?php
/*
* Сниппет предназначен для создании бесплатной доставки СДЭК.
* Ссылка на плагин https://woodev.ru/downloads/wc-edostavka-integration
* Пример кода работает для тарифа СДЭК "Посылка склад-склад". Однако можно применить к любому тарифу, просто заменив ID метода в названии хука woocommerce_edostavka_{ID_метода_СДЭК}_rate
* По вопросам обращайтесь на емайл [email protected]
* Нижеприведённый код необходимо вставить в файл functions.php вашей активной темы.
* Автор кода не несёт отвественности в случае возникновеня каких либо проблем при использовании данного кода.
* Любые изменения которые вы вносите в код вашего сайта, вы делаете это на свой страх и риск.
* Код представлен для ознакомления как есть. Вы должны понимать что с этим кодом нужно делать. Если нет то обатитесь к профессионалам.
*/
add_filter( 'woocommerce_edostavka_edostavka-package-stock_rate', 'custom_make_edostavka_free_shipping_by_cupon', 10, 2 );
function custom_make_edostavka_free_shipping_by_cupon( $rate, $instance_id ) {
$has_coupon = false;
$coupons = WC()->cart->get_coupons();
if ( $coupons ) {
foreach ( $coupons as $code => $coupon ) {
if ( $coupon->is_valid() && $coupon->get_free_shipping() ) {
$has_coupon = true;
break;
}
}
}
$need_instance_id = 0;//Это ID экземпляра нужного вам метода. Поменяйте на своё значение.
if( $instance_id == $need_instance_id && $has_coupon ) {
/*
* Условие сработало. Т.е. ID экзепляра именно тот, что нам нужен, а так же у нас точно применён купон на бесплатную доставку
*/
$rate['cost'] = 0; //Устанавливаем нулевую стоимость для данного метода доставки СДЭК
}
return $rate;
}
//Для версии плагина СДЭК 2.2.х.х код будет таким:
add_filter( 'wc_edostavka_delivery_rates_item', function( $rate_atts, $rate, $package, $shipping_class ) {
    $coupons = WC()->cart->get_coupons();
$need_instance_id = 0;//Это ID экземпляра нужного вам метода. Поменяйте на своё значение.
$need_tariff_code = 136;//Это ID нужного вам тарифа. 136 - это Посылка склад-склад
if( $shipping_class->get_instance_id() == $need_instance_id && $shipping_class->get_option( 'tariff' ) == $need_tariff_code && $coupons ) {
$has_coupon = false;
foreach ( $coupons as $code => $coupon ) {
            if ( $coupon->is_valid() && $coupon->get_free_shipping() ) {
                $has_coupon = true;
                break;
            }
        }
if( $has_coupon ) {
$rate_atts['cost'] = 0;
}
}
return $rate_atts;
}, 10, 4 );
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment