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

Дробное количество товара в 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');

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

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

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

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

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

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

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

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

    Привет.

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

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

      • 1
      828
        •  Администратор
      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
      828
        •  Администратор
      27 окт в 00:42

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

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

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

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

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

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

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

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

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

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

      Сделал:

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

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

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

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

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

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

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

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

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

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

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

    Добрый день.

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

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

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

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

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

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

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

      Ан Ку,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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