Добавить поле количества товара, ограниченное доступным количеством, в цикле магазина Woocommerce - PullRequest
0 голосов
/ 17 ноября 2018

В Woocommerce я использую этот код для добавления поля количества в цикле магазина woocommerce:

/**
 * Override loop template and show quantities next to add to cart buttons
 */
add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        $html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
        $html .= woocommerce_quantity_input( array(), $product, false );
        $html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
        $html .= '</form>';
    }
    return $html;
}

Этот код работает нормально, но он не контролирует доступное количество продукта.

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

Как это можно решить?

1 Ответ

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

Попробуйте следующее, что ограничит количество продукта.Если доступное количество равно 1, поле качества скрыто.Если товара нет в наличии, кнопка отключена и отображает «Нет в наличии»:

add_filter( 'woocommerce_loop_add_to_cart_link', 'quantity_inputs_for_woocommerce_loop_add_to_cart_link', 10, 2 );
function quantity_inputs_for_woocommerce_loop_add_to_cart_link( $html, $product ) {
    if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
        $quantity_in_cart = 0;
        if( ! $product->backorders_allowed() && ! WC()->cart->is_empty() ){
            foreach( WC()->cart->get_cart() as $item ){
                if( $item['product_id'] == $product->get_id() ){
                    $quantity_in_cart += $item['quantity'];
                }
            }
        }
        $max_purchase_quantity = $product->get_max_purchase_quantity() - $quantity_in_cart;
        $html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';

        if( $product->backorders_allowed() || $max_purchase_quantity > 1 ){
            $html .= woocommerce_quantity_input( array(
                'min_value'   => apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),
                'max_value'   => apply_filters( 'woocommerce_quantity_input_max', $max_purchase_quantity, $product ),
                'input_value' => $product->get_min_purchase_quantity(),
            ), $product, false );
            $html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
        } else {
            $html .= '<a class="button disabled">' . __("Out of stock", "woocommerce") . '</a>';
        }
        $html .= '</form>';
    }
    return $html;
}

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

enter image description here

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