Динамические цены (система скидок) для WooCommerce

Не так давно, открыл для себя плагин WooCommerce. Ранее, для создания простых интернет магазинов на WordPress, вполне, обходился простеньким плагином корзины и дополнительными полями, однако когда появилась необходимость более продвинутого функционала, пришлось воспользоваться данным плагином.

Скажу сразу, что плагин достаточно мощный и позволяет создавать достаточно сложные магазины, однако "из коробки" доступны не все функции, которыми обладает плагин. За плагины расширяющие функционал WooCommerce придется заплатить и относительно, не малые деньги. Так, к примеру, когда мне понадобилось менять стоимость товара относительно заказанного количества, был найден плагин на сайте авторов, которые предлагали его за 99$. Конечно, судя по скринам, плагин сделан добротно, но все же заплатить почти сотню "вечно зеленых" я был не готов, поэтому и начал искать альтернативное решение для создания динамических цен для woocommmerce (dynamic pricing). И вот решение, которым я хочу с вами поделиться:

Ниже приведенный код напрямую взят с уже реализованного мной магазина:

Задача стояла установить скидку на товар в зависимости от выбранного количества определенного товара. Если пользователь заказывает более 10 штук определенного товара, то он получает скидку 2%, более 21шт. - скидка 5% и более 52шт. - 10%.
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
      foreach ( $cart_object->cart_contents as $key => $value ) {
        if ($value['quantity']>11 && $value['quantity']<22) {
           $discount = $value['data']->price * 0.02;  
           $value['data']->price = $value['data']->price - $discount;
        }
        elseif ($value['quantity']>22 && $value['quantity']<52) {
            $discount = $value['data']->price * 0.05;  
           $value['data']->price = $value['data']->price - $discount;
        }
        elseif ($value['quantity']>52) {
            $discount = $value['data']->price * 0.10;  
           $value['data']->price = $value['data']->price - $discount;
       } else { ''; }

    }
}
Давайте разберем этот сниппет:
if ($value['quantity']>11 && $value['quantity']<22) {
           $discount = $value['data']->price * 0.02;  
           $value['data']->price = $value['data']->price - $discount;
        }
В данном участке кода мы создали у словие: если количество товара больше 11шт. и меньше 22шт., то вычисляем значение скидки, которое записываем в переменную $discount. Затем вычисляем новыую цену и записываем новое значение:
$value['data']->price = $value['data']->price - $discount;

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

К слову, итоговая стоимость продуктов отображается в списке товаров корзины, на внутренней странице товара, цена не изменится. Но такая задача и не стояла ;)

*Данный сниппет нужно вставить в functions.php вашего шаблона.

UPD:
Следующий сниппет, позволяет просчитывать скидку, когда общая сумма в корзине более определенного числа. И так, велосипед не мой, а найден на просторах сети, по просьбе одного из комментаторов. Если возникнет ошибка - прошу отписаться в комментариях.

И так, создаем "купон" со скидкой в 10% (для этого в настройках woocommerce должны быть активированы купоны).

Далее, в functions.php вставляем следущее:
add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );

function apply_matched_coupons() {
    global $woocommerce;

    $coupon_code = '10_procent_code'; // Код купона

    if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;

    if ( $woocommerce->cart->cart_contents_total >= 2500 ) { // Сумма при которой используется скидка
        $woocommerce->cart->add_discount( $coupon_code );
        $woocommerce->show_messages();
    }

}
Обратите внимание что в $coupon_code = '10_procent_code' вместо "10_procent_code" вы должны вставить код скидочного купона.
Блог WordPress плагины и хаки Динамические цены (система скидок) для WooCommerce