Задача. Необходимо реализовать возможность установить в Woocommerce минимальное количество товара для заказа с определенным шагом. Т.е. в настройке каждого товара должна быть настройка, с помощью которой можно установить минимально возможное количество товара и шаг добавления.
Например, товар продается в упаковке по 5 штук и когда мы нажимаем увеличить число товаров, то каждый раз добавляется по 5 штук.
Решение 1. Для установки минимально возможного колиства товаров можно добавить следующий Код №1 в functions.php
(работает только для невариативных товаров):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
## Добавление опции установки минимального количества заказа товара с шагом // Добавление и отображение дополнительных настраиваемых полей количества товаров add_action( 'woocommerce_product_options_pricing', 'additional_product_pricing_option_fields', 50 ); function additional_product_pricing_option_fields() { $domain = "woocommerce"; global $post; echo '</div><div class="options_group pricing">'; woocommerce_wp_text_input( array( 'id' => '_input_qty', 'label' => __("Минимальное количество товара", $domain ), 'placeholder' => '', 'description' => __("Минимальное количество единиц товара для заказа", $domain ), 'desc_tip' => true, ) ); woocommerce_wp_text_input( array( 'id' => '_step_qty', 'label' => __("Шаг", $domain ), 'placeholder' => '', 'description' => __("Шаг единиц упаковок при заказе", $domain ), 'desc_tip' => true, ) ); } // Сохранение пользовательских значений количества товара add_action( 'woocommerce_admin_process_product_object', 'save_product_custom_meta_data', 100, 1 ); function save_product_custom_meta_data( $product ){ if ( isset( $_POST['_input_qty'] ) ) $product->update_meta_data( '_input_qty', sanitize_text_field($_POST['_input_qty']) ); if ( isset( $_POST['_step_qty'] ) ) $product->update_meta_data( '_step_qty', sanitize_text_field($_POST['_step_qty']) ); } // Установить поле количества товара по товару add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 ); function custom_quantity_input_args( $args, $product ) { if( $product->get_meta('_input_qty') ){ $args['input_value'] = is_cart() ? $args['input_value'] : $product->get_meta('_input_qty'); $args['min_value'] = $product->get_meta('_input_qty'); } if( $product->get_meta('_step_qty') ){ $args['step'] = $product->get_meta('_step_qty'); } return $args; } |
Решение 2. В замен первого варианта, можно изменить шаг заказа для всех товаров на сайте, в том числе и для вариативных, используя Код №2. Здесь цифра «5» является шагом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
## Изменить шаг заказа товара для всех товаров add_filter( 'woocommerce_quantity_input_args', 'custom_quantity_input_args', 10, 2 ); function custom_quantity_input_args( $args, $product ) { $args['input_value'] = is_cart() ? $args['input_value'] : 5; $args['min_value'] = 5; $args['step'] = 5; return $args; } // Для вариативных товаров add_filter( 'woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3 ); function custom_qty_available_variation_args( $data, $product, $variation ) { $data['min_qty'] = 5; return $data; } |
Можно использовать либо Код №1 , либо Код №2, т.к. последний добавленный сниппет переопределит предыдущий. Или использовать Код №1 и часть из Кода №2 для вариативных товаров.