Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем SuperTester, 7 фев 2015.

  1. SuperTester

    SuperTester

    Сообщения:
    2
    Симпатии:
    1
    Баллы:
    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. SuperTester

    SuperTester

    Сообщения:
    2
    Симпатии:
    1
    Баллы:
    1
    Решение нашел. Надеюсь, пригодится кому-то в будущем.

    Код:
    /**
    * 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)
     
    • Нравится Нравится x 1