• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Скрыть методы оплаты

#1
Добрый день, уважаемые коллеги и специалисты.

Задача следующая: в магазине стоимость доставки по городу 300 рублей, но при заказе от 10000 рублей - она бесплатная. С помощью стандартных настроек удалось добиться вывода бесплатной доставки при заказе на нужную сумму, но проблема в том, что платный вариант доставки продолжает отображаться.

На форуме нашел функцию, которая позволяет скрыть все способы доставки, если доступен бесплатный (прикрепляю ниже). Но все скрывать не нужно, только один. Как доработать эту функцию, чтобы при доступной бесплатной доставке скрывалась только местная доставка (т.е. local_delivery).

С уважением, Вячеслав

Код:
// Hide ALL shipping options when free shipping is available
add_filter( 'woocommerce_available_shipping_methods', 'hide_all_shipping_when_free_is_available' , 10, 1 );
/**
* Hide ALL Shipping option when free shipping is available
*
* @param array $available_methods
*/
function hide_all_shipping_when_free_is_available( $available_methods ) {
      if( isset( $available_methods['free_shipping'] ) ) :
    
        // Get Free Shipping array into a new array
        $freeshipping = array();
        $freeshipping = $available_methods['free_shipping'];
        // Empty the $available_methods array
        unset( $available_methods );
        // Add Free Shipping back into $avaialble_methods
        $available_methods = array();
        $available_methods[] = $freeshipping;
    endif;
    return $available_methods;
}
 
#2
Решение нашел. Надеюсь, пригодится кому-то в будущем.

Код:
/**
* woocommerce_package_rates is a 2.1+ hook
*/
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

/**
* Hide shipping rates when free shipping is available
*
* @param array $rates Array of rates found for the package
* @param array $package The package array/object being shipped
* @return array of modified rates
*/
function hide_shipping_when_free_is_available( $rates, $package ) {

// Only modify rates if free_shipping is present
if ( isset( $rates['free_shipping'] ) ) {

// Скрываем указанный способ доставки
unset( $rates['flat_rate'] );

}

return $rates;
}
Вместо flat_rate подставляете нужный вам:
local_delivery - местная доставка
international_delivery - международная доставка
local_pickup - самовывоз

Сам код добавляем в файл function.php, который находится в папке с вашей темой (сайт/wp-content/themes/название темы/function.php)
 

franch

Новичок
#3
Здравствуйте.Имею четыре платных, четыре бесплатных доставки и самовывоз. Хочу скрыть платные доставки, когда становятся доступны бесплатные. Вставляю вот этот код:

/**
* Hide shipping rates when free shipping is available, but keep "Local pickup"
* Updated to support WooCommerce 2.6 Shipping Zones
*/

function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}

if ( ! empty( $new_rates ) ) {
//Save local pickup if it's present.
foreach ( $rates as $rate_id => $rate ) {
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}

return $rates;
}

add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

И у меня платные доставки скрываются, остается самовывоз и только одна бесплатная доставка, остальные три не отображаются. Перепробовал все, не знаю что уже и делать, помогите пожалуйста.
 
Сверху Снизу