add_filter( 'woocommerce_package_rates', 'disable_paid_shipping', 9999, 2 );
function disable_paid_shipping( $rates, $package ) {
$free_rates = array();
foreach ( $rates as $i => $rate ) {
if ( str_contains( $rate->label, "gratuita" ) OR str_contains( $rate->label, "gratuito" ) ) {
$free_rates[] = $rate;
}
if ( str_contains( $rate->id, "local") ) {
$local = $rate;
}
if ( str_contains( $rate->id, "fermopoint") ) {
$fermopoint = $rate;
}
}
if ( !empty( $free_rates ) ) {
if ( isset($fermopoint) ) {
$fermopoint->cost = 0;
$fermopoint->label .= ' gratuito';
array_unshift( $free_rates, $fermopoint );
}
if ( isset($local) ) {
$free_rates[] = $local;
}
$rates = $free_rates;
}
return $rates;
}
< /code>
Код работает, как и ожидалось, если только для двух неожиданных событий происходит: < /p>
Метод доставки больше не выбран по умолчанию. (Как на странице Cart, так и на странице оформления заказа) >
Чтобы решить 1 -ю проблему при оформлении заказа, я могу обойтись, вынуждая выбор через крючок на woocommerce_before_cart
(хотя это выглядит как принудительный трюк).
Для 2 -й проблемы я понятия не имею.
Предложения?
Я только что написал этот фильтр, чтобы отключить не бесплатные методы доставки, когда доступна бесплатная доставка: < /p> [code]add_filter( 'woocommerce_package_rates', 'disable_paid_shipping', 9999, 2 ); function disable_paid_shipping( $rates, $package ) { $free_rates = array();
foreach ( $rates as $i => $rate ) { if ( str_contains( $rate->label, "gratuita" ) OR str_contains( $rate->label, "gratuito" ) ) { $free_rates[] = $rate; }
return $rates; } < /code> Код работает, как и ожидалось, если только для двух неожиданных событий происходит: < /p>
Метод доставки больше не выбран по умолчанию. (Как на странице Cart, так и на странице оформления заказа) > Чтобы решить 1 -ю проблему при оформлении заказа, я могу обойтись, вынуждая выбор через крючок на woocommerce_before_cart [/code] (хотя это выглядит как принудительный трюк). Для 2 -й проблемы я понятия не имею. Предложения?