<?
function hard_remove_shipping_method( $rates, $package ) {
$billingSity = WC()->customer->get_billing_city();
//задаем через массивы. в будущем проще добавить город к условию
$arr = ['Москва','Санкт-Петербург'];
$arrOne = ['Москва'];
$arrTwo = ['Санкт-Петербург'];
$reRates = $rates;
//если не Москва и не Санкт-Петербург, сработает общее условие для беспл доставки
if (!in_array($billingSity, $arr)){
//отключаем методы, не подходящие для региона
unset( $reRates[ 'local_pickup:10' ] ); // 'local_pickup:10' и прочие... у вас вместо этих значений будут ваши можно посмотреть в инструментах разработчика в браузере
unset( $reRates[ 'flat_rate:28' ] );
unset( $reRates[ 'flat_rate:27' ] );
unset( $reRates[ 'free_shipping:11' ] );
unset( $reRates[ 'free_shipping:26' ] );
$new_rates = array();
// в цикле проверяем, есть ли бесплатная доставка
foreach ( $reRates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break; // бесплатную доставку нашли, выходим из цикла
}
}
//Есть бесплатная, оставляем только ее
if (!empty( $new_rates )) {
$reRates = $new_rates;
}
return $reRates;
}
// если Москва
if (in_array($billingSity, $arrOne) ) {
unset( $reRates[ 'flat_rate:28' ] );
unset( $reRates[ 'flat_rate:41' ] );
unset( $reRates[ 'flat_rate:42' ] );
unset( $reRates[ 'flat_rate:43' ] );
unset( $reRates[ 'flat_rate:44' ] );
unset( $reRates[ 'free_shipping:30' ] );
unset( $reRates[ 'free_shipping:26' ] );
$new_rates = array();
foreach ( $reRates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if (!empty( $new_rates )) {
unset( $reRates[ 'flat_rate:27' ] );
}
return $reRates;
}
// если Санкт-Петербург
if (in_array($billingSity, $arrTwo)) {
unset( $reRates[ 'flat_rate:27' ] );
unset( $reRates[ 'flat_rate:41' ] );
unset( $reRates[ 'flat_rate:42' ] );
unset( $reRates[ 'flat_rate:43' ] );
unset( $reRates[ 'flat_rate:44' ] );
unset( $reRates[ 'free_shipping:30' ] );
unset( $reRates[ 'free_shipping:11' ] );
$new_rates = array();
foreach ( $reRates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if (!empty( $new_rates )) {
unset( $reRates[ 'flat_rate:28' ] );
}
return $reRates;
}
return $reRates;
}