Удалить пользовательское поле количества, когда товара нет в наличии в архивах WooCommerce

Я пытаюсь удалить окно выбора количества со страниц магазина, категории и продукта, когда товара нет в наличии. Есть ли простой способ не показывать окно выбора количества с помощью кода?

Я использую код ниже, чтобы показать окно выбора количества.

 /**
   * Add quantity field on the archive page.
  */
 function custom_quantity_field_archive() {

$product = wc_get_product( get_the_ID() );

if ( ! $product->is_sold_individually() && 'variable' != $product- 
>product_type && $product->is_purchasable() ) {
    woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => 
$product->backorders_allowed() ? '' : $product->get_stock_quantity() ) );
}

}
   add_action( 'woocommerce_after_shop_loop_item', 
   'custom_quantity_field_archive', 0, 9 );


/**
* Add requires JavaScript.
 */
 function custom_add_to_cart_quantity_handler() {

wc_enqueue_js( '
    jQuery( ".post-type-archive-product" ).on( "click", ".quantity input", 
 function() {
        return false;
    });
    jQuery( ".post-type-archive-product" ).on( "change input", ".quantity 
.qty", function() {
        var add_to_cart_button = jQuery( this ).parents( ".product" ).find( 
  ".add_to_cart_button" );

        // For AJAX add-to-cart actions
        add_to_cart_button.data( "quantity", jQuery( this ).val() );

        // For non-AJAX add-to-cart actions
        add_to_cart_button.attr( "href", "?add-to-cart=" + 
  add_to_cart_button.attr( "data-product_id" ) + "&quantity=" + jQuery( this 
  ).val() );
    });
' );

 }
  add_action( 'init', 'custom_add_to_cart_quantity_handler' );

3 ответа

Нет необходимости в дополнительном коде, так как WooCommerce делает это автоматически. На вкладке Инвентаризация при редактировании продукта установите флажок "Управление запасами", а затем выберите "Разрешить обратные заказы?" и установите его на "Не разрешать".

Для поля количества страниц ваших архивов вам нужно будет внести некоторые изменения в ваш код:

add_action( 'woocommerce_after_shop_loop_item', 'custom_quantity_field_archive', 0, 9 )
function custom_quantity_field_archive() {
    global $product;

    if ( ! $product->is_sold_individually() && ! $product->is_type('variable') 
    && $product->is_purchasable() && $product->is_in_stock() ) {
        woocommerce_quantity_input( array( 
            'min_value' => 1, 
            'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity() 
        ) );
    }
}

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

Вы можете переопределить шаблон WooCommerce. откройте папку woocommerce внутри папки с темой, а затем один продукт / add-to-cart / simple.php

скопируйте вставьте код из плагина woocommerce / templates / single-template / add-to-cart / simple.php

на линии № 46 вы увидите

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', $product->get_max_purchase_quantity(), $product ),
  'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : $product->get_min_purchase_quantity(),
) );

Вы можете добавить пользовательский оператор if перед вызовом функции woocommerce_quantity_input.

if($product->get_stock_quantity() > 0) {
  // woocommerce_quantity_input calling here...
}

Я надеюсь, что это поможет вам.

ПРИМЕЧАНИЕ. Структура шаблона и переопределение шаблонов через тему.

Другие вопросы по тегам