Быстрый и надёжный хостинг на SSD-дисках от 165р в месяц   •   Реклама
4 097 просм
29 комм
Поделиться:

Дробное количество товара в WooCommerce

18 ноя
Хаки

На данный момент существует большое количество разнообразных интернет-магазинов. Одни продают электронные товары (ключи для игр, книги, фильмы и прочее), другие же реализуют материальную продукцию – стулья, столы, различную технику. Все эти товары продаются поштучно, что вполне логично для такого типа товаров. Но если вы продаете обои, различные сыпучие материалы или, например, чай, то там в распоряжении покупателя должна быть не только сама продукция, но и ее определенная единица. Например, 10 метров, 300 граммов и прочее.

По умолчанию, в CMS WordPress, а именно в ее дополнении WooCommerce нет поддержки дробного количества товаров, и готовых плагинов, решая эту задачу, я также не смог найти, за исключением нескольких, которые во много усложняют процесс реализации.

А зачем, собственно, усложнять, когда можно сделать все как никогда просто? Для реализации этой задачи вам потребуется воспользоваться парой несложных функций. А именно:

function min_decimal($val) {

    return 0.5; // Минимальное значение
	
}

add_filter('woocommerce_quantity_input_min', 'min_decimal');

и

function step_decimal($val) {

    return 0.5; // Шаг
	
}

add_filter('woocommerce_quantity_input_step', 'step_decimal');

Их вы вставляете в низ файла functions.php, который находится в папке вашей темы.

Первая функция позволяет задать минимальное количества товара (в нашем случае – это 0,5), а вторая – шаг увеличения/уменьшения количества товара. Скрипт работает как в карточке товара, так и в корзине пользователя.

А для того, чтобы удалить стандартную проверку на корректность введенного числа (без отключения дробные числа будут считаться ошибочными), в низ все того файла functions.php вы вставляете:

// Удаление и добавление своего фильтра проверки количества

remove_filter('woocommerce_stock_amount', 'intval');
add_filter('woocommerce_stock_amount', 'floatval');

По необходимости вид дробного числа (количество знаков после запятой) и его размер вы можете задать сами в первых двух функциях.

29
комментариев
Форма комментирования этой статьи скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    1
      •  Пользователь
    16 ноя в 11:09

    Здравствуйте. Всё работает. Но есть пара моментов:

    1. при изменении количества товара (шаг 0.1), добавляются лишние знаки после запятой (1.2000000000000002). Не понимаю как исправить. Но в корзине отображается корректно.

    2. Еще нужно, чтобы можно было указывать значения через запятую. По дефолту дробная часть отделяется точкой, но так же надо сделать чтобы можно было самому писать количество, при этом указывая через запятую. В данный момент, если указать через запятую, идет округление. Если дробь меньше 5, то будет число один (пример число выше), если больше, то уже 2.

    Буду признателен за помощь. Не один день ломаю с эти голову, ничего не получается

    • 0
    1
      •  Пользователь
    15 авг в 19:55

    Здравствуйте, всё круто работает, но нигде не нашёл решения проблемы.

    У меня в одной категории есть товары, которые содержат и дробные и целые значения.

    Нашёл решение как сделать не дробной категории, но как сделать в категории с дробными значениями, товары с целым значением?

      • 0
      841
        •  Администратор
      22 авг в 21:34

      Дмитрий Антуфьев, здравствуйте!

      Не совсем понял Ваш вопрос.

    • 2
    1
      •  Пользователь
    20 мая в 13:19

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

    Помоги решить проблему. sweat Пожалуйста!

      • 0
      841
        •  Администратор
      22 авг в 21:32

      Кирилл, проблема актуальна? Какие плагины установлены?

    • 1
    1
      •  Пользователь
    16 мая в 01:19

    Доброго дня, все работает, только

    вот эта надпись woocommerce_quantity<?php вверху магазина confuse

      • 0
      841
        •  Администратор
      22 авг в 21:31

      Антон на Море, здравствуйте!

      Вероятнее всего допустили ошибку при вставке кода.

    • 0
    2
      •  Пользователь
    7 мая в 13:13

    Привет.

    А как сделать данную надстройку только для определенных категории?

    Т.е. часть категорий должны продаваться поштучно, а часть категорий должны продаваться дробно.

      • 1
      841
        •  Администратор
      9 мая в 12:40

      Василий, Здравствуйте! Попробуйте так.

      Функцию:

      function min_decimal($val) {
      
          return 0.5; // Минимальное значение
      	
      }
      
      add_filter('woocommerce_quantity_input_min', 'min_decimal');

      замените на:

      function min_decimal($val, $product) {
      	
      	if(has_term(25, 'product_cat', $product->id)) {
      	
      		return 0.5; // Минимальное значение
      	
      	}
      	
      }
      
      add_filter('woocommerce_quantity_input_min', 'min_decimal', 10, 2);

      А:

      function step_decimal($val) {
      
          return 0.5; // Шаг
      	
      }
      
      add_filter('woocommerce_quantity_input_step', 'step_decimal');

      замените на:

      function step_decimal($val, $product) {
      	
      	if(has_term(25, 'product_cat', $product->id)) {
      		
      		return 0.5; // Шаг
      		
      	}
      	
      }
      
      add_filter('woocommerce_quantity_input_step', 'step_decimal', 10, 2);

      25 - ID категории.

      • 0
      2
        •  Пользователь
      12 мая в 12:36

      Артём Мáлков, странно, что мне не пришло уведомление о комментарии - хоть я и подписывался.

      В общем Спасибо! Работает.

    • 0
    3
      •  Проверенный
    26 окт в 14:42

    Артем Мáлков, спасибо большое за скрипты, поставил мин. 1, шаг 0,1 подскажите пожалуйста, на странице товара добавляется только один товар, но в корзине это минимальное значение можно убрать, чего не хотелось бы, как это можно исправить?

      • 0
      841
        •  Администратор
      27 окт в 00:42

      Эрик Мурадян, Здравствуйте.

      Не совсем понял. В корзине минимальное значение - это 0. И есть выбрано количество 0, то товар удаляется из корзины.

      • 0
      3
        •  Проверенный
      27 окт в 20:15

      Артем Мáлков, но ведь стоит минимальное значение 1, а пользователь в корзине может уменьшать меньше единицы

      • 0
      841
        •  Администратор
      27 окт в 22:08

      Эрик Мурадян, покажите пример сайта.

      • 0
      841
        •  Администратор
      28 окт в 13:45

      Эрик Мурадян, вся проблема в том, минимум в 1 работает только в товаре. А в корзине минимум - 0. Но по скольку шаг у Вас 0,1 то и в корзине могут сделать меньше 1 до 0. Если предоставите FTP сайта - смогу помочь в решении этой проблемы.

      • 0
      841
        •  Администратор
      29 окт в 17:49

      Эрик Мурадян, проверьте, должно работать.

      Сделал:

      1. Скопировал файл cart.php из /wp-content/plugins/woocommerce/templates/cart/ в /wp-content/themes/hestia/woocommerce/cart/

      2. В нем строку 113 заменил на 114.

      • 2
      3
        •  Проверенный
      30 окт в 08:07

      Артем Мáлков, спасибо большое

    • 1
    2
      •  Проверенный
    17 июл в 16:50

    Здравствуйте, Артем. Спасибо большое! Однако, вариативный товар невозможно выбрать 0,5, требует только от 1, однако шаг в 0,5 работает, правда начиная с 1,5. Не подскажете в какую сторону копать?

      • 1
      841
        •  Администратор
      17 июл в 20:19

      Семен Кирилов, по хорошему бы, доступы к проблемному сайту, тогда точно смогу сказать в чем проблема.

      • 0
      2
        •  Проверенный
      18 июл в 11:23

      Здравствуйте, Артем. Спасибо за оперативность.Сайт в разработке на localhost. До момента выбора вариации товара (ткань метражом, рулоном и т.п.) минимальное значение срабатывает, но нужно выбрать вариацию чтобы добавить в корзину. - вот на этом шаге и выскакивает "Значение должно быть больше или равно 1"

    • 0
    3
      •  Пользователь
    17 июл в 09:07

    Добрый день.

    Хороший гайд, давно искал как сделать дробные значения. Но одна проблема - перестали работать кнопки увеличения и уменьшения количества товара (на карточке товара и в корзине).

      • 0
      841
        •  Администратор
      17 июл в 20:16

      Ан Ку, нужно поправить шаг, всего скорее, с которым идет увеличение / уменьшение значения.

      Где именно это правится не подскажу, так как под рукой нет сайта с Woo.

      • 0
      3
        •  Пользователь
      1 авг в 09:42

      Попробовал менять значение шага, не помогло. Был бы очень признателен, если бы подсказали где править увеличение/уменьшение.cry

      • 2
      841
        •  Администратор
      1 авг в 19:58

      Ан Ку,

      > Где именно это правится не подскажу, так как под рукой нет сайта с Woo.

      Можете предоставить доступы к вашему сайту (Админка + FTP), тогда хоть как-то смогу Вам помочь.

      • 1
      841
        •  Администратор
      1 авг в 20:01

      Ан Ку, а вообще, разве функция:

      function step_decimal($val) {
      
      	return 0.5; // Шаг
      	
      }
      
      add_filter('woocommerce_quantity_input_step', 'step_decimal');

      не решила Вашу проблему?

      • 0
      3
        •  Пользователь
      2 авг в 10:48

      Функция проблему не решила. Попробовал сделать то же самое через плагин. Работает только в том случае, когда заменяешь свои кнопки +/- на кнопки из плагина (там есть чекбокс на замену стандартных своими).

      Не совсем понятно как отправить личное сообщение с доступами.

      • 0
      841
        •  Администратор
      2 авг в 14:24

      Ан Ку, можете через комментарии, можете через форму обратной связи.

    • 0
    1
      •  Пользователь
    21 июн в 06:05

    Привет, Артем. У нас линолеум. Мы сложно реализовали подсчет длины*ширины*цены плагином с кучей костылей.

    Может вы подскажите, как упростить.

    Как сделать чтобы атрибуты умножались на поле "колво" , которое у нас как длина, и на цену(базовая/распродажная)

    Сейчас атрибуты просто плюсуются. Например у нас в атрибутах ширина линолеума, 3.5. Как атрибут умножить на длину, которую пользователь вводит?

    Сейчас сделано через плагин Woo Price, а от него одни беды на сайте. Куча глюков и прочих костылей. Разве нельзя сделать проще? Надо то чтобы умножалось на значение атрибута.

    При этом, у нас есть товар, атрибуты которого умножать не надо, типа обычный выбор цвета.

    То есть есть товар где следует умножать значение атрибута, а где нет.

      • 0
      841
        •  Администратор
      21 июн в 15:36

      Ром, здравствуйте. Скоро на сайте будет статья, посвященная переоценке товаров в корзине. Думаю, что она сможет помочь с вашей проблемой.

Подняться наверх
«Pandoge» - помощник вебмастера