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

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

Image CMS
#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)
 
Сверху Снизу