В этом уроке я поделюсь с вами сниппетом, который я использовал в одном из своих проектов ещё год назад. А делает он вот что:
Для настройки динамических цен есть целый вагон плагинов, в основном платных. Скажу прямо – я их не тестировал, вполне возможно, что среди них есть хорошие, но это не точно.
Итак, код для functions.php
текущей или дочерней темы:
add_action( 'woocommerce_before_calculate_totals', 'truemisha_quantity_based_price' ); function truemisha_quantity_based_price( $cart_object ) { // вообще всегда можно сделать print_r( $cart_object ); exit; если что-то не ясно $product_id = 35; // целевой ID товара с динамической ценой // тут необязательно крутить foreach, но я вот решил сделать так foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) { if( $cart_item[ 'product_id' ] == $product_id ) { $quantity = $cart_item[ 'quantity' ]; break; } } // если количество товара больше трёх, можно задать любое своё значение if( ! empty( $quantity ) && $quantity > 3 ) { // опять цикл, да foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) { // если нужный товар if( $cart_item['product_id'] == $product_id ) { // я решил сделать скидку 50% $newprice = $cart_item['data']->get_regular_price() / 2; $cart_item['data']->set_price( $newprice ); } } } }
И как обычно, немного комментариев к коду.
foreach()
– в целом да, в не древних версиях WooCommerce можно попробовать воспользоваться методом generate_cart_id()
и сразу обратиться к нужному товару в массиве корзины, есть примерный пример тут.get_category_ids()
.Если вам нелегко даётся WooCommerce, но вы очень хотите в нём разобраться, то рекомендую вам мой видеокурс! 🚀
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Спасибо, полезно, как впрочем и всегда)
Спасибо большое! В дальнейшем меня ваш код очень выручит!
Всегда пожалуйста 🙃
Добрый день интересная статься, у Вас скидка 50% если больше трех позиций, а как сделать скидку 70% если товаров пример больше 15шт
мой первый комментарии не совсем коректно был написан, мне интересно как сделать что если больше 3шт то / 2 (т.е 50%), если написать = 100, то цена будет 100р, верно?
И в этом же товаре можно сделать что бы если 3шт то цена одна, а когда 10 шт то цена другая или надо создавать такой же скрипт где указать новые параметры, хотелось бы в одном как то реализовать эти параметры. Это возможно?
Добрый день,
Вы можете накидать условий сюда:
Спасибо! А цену как поставить точную ($newprice = $cart_item['data']->get_regular_price() во тут 100;), если ставлю "+ 100","- 100","* 100"," / 100" - все работает без проблем, но есть ставлю "= 100" пишет ошибку
Александр, ==
🙂
Спасибо, Миша))) читай твой блог, смотрел другие примеры твоих работ, пробовал: !== !=, ну и == и все получилось, но все равно спасибо за ответ )
после чистки кэша пишет ошибку если ставлю == цена после 3 шт. идет не та которую задаю == 150, а ноль почему то
интересно. а что за ошибка?
Добрый день, Михаил. Спасибо за ценную информацию.
а можно вместо забитых вручную цифр поставить переменную из acf ?
тобиж вместо скидки просто поставить
$new_price = get_field( "wholesale_price");
когда подставляю эту переменную не работает ничего ..(
Добрый день!
Скорее всего да, но с этим плагином я предпочитаю не работать, поэтому ничего вам не подскажу 🙃
$new_price = get_field( "wholesale_price");
->
$new_price = get_post_meta( $post->ID, 'wholesale_price', true );
Миша Добрый День, просьба помочь с вашей функцией для моей задачи
Логика акции “Бутыль в подарок”: предварительно надо проверить, что минимально возможное кол-во бутылей 19л в Корзине равно двум, затем вычесть стоимость одной бутыли из суммы заказа. Таких три товара
Добрый день, спасибо за код, это именно то что я искал. Подскажите только как обращаться ко всем товарам сразу, а не к одному определенному id. Спасибо
Добрый день,
Тогда нам нужно всего лишь убрать условия на 12-й и 26-й строках.
Спасибо за ваш труд, очень полезный пример.
А как сделать чтобы к каждому товару в козине применялась разная скидка. Сейчас если один товар в корзине, то все отлично работает. А если два и более, то скидка применяется во-первых ко всем товарам а во-вторых при условии (больше или меньше), первого товара.. Помогите, как решить эту проблему?
Для применения к нескольким товарам, можете заменить строчку:
на:
Про второе условие не совсем понял...
Как программно можно пересчитать стоимость товара и корзины исходя из переменных
Есть стандартная стоимость товара, имеется несколько переменных у товара
rangeby1 Стоимость от
rangeto1 Стоимость до
spec_price1 Цена
rangeby2 Стоимость от
rangeto2 Стоимость до
spec_price2 Цена
rangeby Стоимость свыше
spec_price Цена
Диапазон От и До и к этому диапазону соответствующая цена
К сожалению, код выше не помог. Может, помимо вставки его в functions.php, ещё что-то нужно делать?
Добавил его на первый попавшийся тестовый магазин клиента, всё заработало :)
Я тоже его снова добил и ничего не заработало. Почему у вас работает, а у меня не работает? Может у вас ещё какой-то ещё код прописан? Почему при увеличении или уменьшении количества товаров, ничего не происходит?
1 в 1 скопировал и вставил. У вас корзина не обновляется видимо.
а как именно выглядит кнопка - обновить страницу и где именно она должна быть в коде?
Можете попробовать урок, ссылку на который я вам скинул. Но кнопка в принципе должна быть. Выглядит как кнопка с надписью "Обновить".
Здравствуйте! Почему не работает
$cart_item['data']->set_price( $newprice );
не записывает в корзину