Как обновить фиксированные количества товара в корзине, не нарушая лимит на товар? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть этот фрагмент кода, который позволяет мне добавлять фиксированные количества в корзину через выпадающий список опций. Что мне нужно, так это то, что всякий раз, когда я выбираю и добавляю количество в корзину, оно автоматически обновляет это значение в корзине, а не увеличивает количество, приводя к превышению допустимого количества на продукт.

Я могу ограничить общее количество в корзине, но если бы я мог ограничить количество для продукта, возможно, проблема была бы решена?

Есть предложения, как мне это решить?

function woocommerce_quantity_input($data = null) {
    global $product;

    $defaults = array(
        'input_name' => array_key_exists('input_name', $data) ? $data['input_name'] : 'quantity',
        'input_value'   => '25',
        'style'     => apply_filters( 'woocommerce_quantity_style', 'float:left; margin-right:10px;', $product )
    );

    $lista = array(25, 50, 100, 250);

    $options = '';

    for ( $count = 0; $count < sizeof($lista); $count++) { 
        $valor = $lista[$count];
        $selected = ($valor === $data['input_value']) ? ' selected' : '';
        $options .= '<option value="' . $valor . '"'.$selected.'>' . $valor . ''; }

    echo '<div class="quantity_select" style="' . $defaults['style'] . '"><select name="' . esc_attr( $defaults['input_name'] ) . '" title="' . _x( 'Qty', 'Product quantity input tooltip', 'woocommerce' ) . '" class="qty">' . $options . '</select></div>';
}

1 Ответ

1 голос
/ 24 апреля 2020

После некоторых исследований и помощи некоторых пользователей кода здесь, в stackoverflow, я дошел до этого. Сочетание этого кода и кода выше приводит к реализации, которая решает мой вопрос. Я могу установить фиксированные количества, если вы превышаете лимит на один продукт, определенный мной. Таким образом, проблема увеличения запрошенного фиксированного количества определенного продукта без превышения лимита решена.

add_filter( 'woocommerce_add_to_cart_validation', 'control_limit_add_to_cart', 10, 3 );

function control_limit_add_to_cart( $passed, $product_id, $quantity ) {

    //set max quantity per product in cart
    $max_per_product_qty = 250;
    //variable for over quantity verfication
    $over_qty = false;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        //Get each product id and respective quantity
        $product_identity = $cart_item['data']->get_id();
        $product_quantity = $cart_item['quantity'];
        //Set variable with the requested quantity of some product plus the actual quantity already in cart of that same product 
        $total_quantity_request = $product_quantity + $quantity;

        //compare the quantity of some product in cart to the requested quantity value of that same product
        if( ( $product_identity == $product_id ) && ( ( $product_quantity > $max_per_product_qty ) || ( $total_quantity_request > $max_per_product_qty ) ) ){
            //variable with the name of the product requested
            $product_name = $cart_item['data']->get_name();
            //set variable with true verification for over quantity
            $over_qty = true;
        }
    }

    if( $over_qty ){
        // Result is false==error
        $passed = false;
        // Write msg
         wc_add_notice( __( "You've the amount limit for the product ".$product_name.".", "woocommerce" ), "error" );
    }
    return $passed;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...