Пользовательские количества на отдельных страницах товара в Woocommerce - PullRequest
0 голосов
/ 20 ноября 2018

В Woocommerce мне нужно фиксированное количество для моих продуктов.

Например, количества:

100,300,500,1000,1200 & 1500

Как настроить?

1 Ответ

0 голосов
/ 20 ноября 2018

Для настройки количества вы можете использовать крючок фильтра woocommerce_quantity_input_args на страницах вашего отдельного продукта.

Для этого хука есть 2 аргумента:

  1. Возвращенный $args аргумент, который обрабатывает:
    • «Импульсное значение по умолчанию» с $args['input_value'] (значение по умолчанию 1)
    • «Максимально допустимое значение» с $args['max_value'] (значение по умолчанию -1)
    • «Минимально допустимое значение» с $args['min_value'] (значение по умолчанию 0)
    • «Значение шага по умолчанию» с $args['step'] (значение по умолчанию 1)
    • «Значение шаблона по умолчанию» с $args['pattern'] (значение по умолчанию '[0-9]*')
    • «Значение по умолчанию для режима» с $args['inputmode'] (значение по умолчанию 'numeric*')
  2. Объект WC_Product $product, позволяющий настраивать таргетинг на определенные продукты.

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

Примечание: Нельзя иметь переменный шаг, поскольку он является постоянным числовым значением.


Определенные конкретные количества по продукту (для простых продуктов) :

Вы можете добавить настраиваемое поле для ваших продуктов, которое будет обрабатывать фиксированное количество (для простых продуктов):

// Adding and displaying additional product quantity custom fields
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'         => __("Input quantity", $domain ),
        'placeholder'   => '',
        'description'   => __("Input quantity explanation goes here…", $domain ),
        'desc_tip'      => true,
    ) );


    woocommerce_wp_text_input( array(
        'id'            => '_step_qty',
        'label'         => __("Step quantity", $domain ),
        'placeholder'   => '',
        'description'   => __("Step quantity explanation goes here…", $domain ),
        'desc_tip'      => true,
    ) );

}

// Saving product custom quantity values
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']) );
}

// Set product quantity field by product
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;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Проверено и работает.

additional product custom fields


Обработка шагов

Следующий пример будет начинаться с 100 и с шагом 100:

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'] : 100;
    $args['min_value']   = 100;
    $args['step']        = 100;

    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'] = 100;

    return $data;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Проверено и работает.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...