当 WooCommerce 档案中的产品缺货时删除自定义数量字段

Posted

技术标签:

【中文标题】当 WooCommerce 档案中的产品缺货时删除自定义数量字段【英文标题】:Remove custom quantity field when product out of stock on WooCommerce archives 【发布时间】:2018-09-25 19:03:07 【问题描述】:

当商品缺货时,我试图从商店、类别和产品页面中删除数量选择框。有没有使用代码不显示数量选择框的简单方法?

我正在使用下面的代码来显示数量选择框。

 /**
   * 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' );

【问题讨论】:

【参考方案1】:

您可以覆盖 WooCommerce 模板。 在您的主题文件夹中打开一个 woocommerce 文件夹,然后 单一产品/添加到购物车/simple.php

从 woocommerce plugin/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(),
) );

您可以在调用woocommerce_quantity_input函数之前添加自定义if语句:

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

注意 Template structure & Overriding templates via a theme

【讨论】:

好的,我将你的代码包裹在 simple.php 文件中的 woo 代码中,但数量输入框仍然出现? 嗨 James Donald,确保在您的主题文件中添加准确的模板路径。否则模板覆盖将不起作用。【参考方案2】:

无需额外的代码,因为 WooCommerce 会自动执行此操作。在编辑产品时,在“库存”选项卡上,勾选“管理库存”,然后选择“允许延期交货?”并将其设置为“不允许”。

【讨论】:

奇怪的是,我检查了一个简单产品的设置,设置被指定为启用管理库存和不允许延期交货?好的,为了澄清一下,我刚刚检查了实际的产品页面,是的,没有添加到购物车或数量选择器 - 我的数量选择器框出现在商店页面和类别 + 产品页面上。 啊,这说明了... WC 默认情况下不会将数量选择器添加到商店或类别循环中,因此它必须是由您的主题添加的。我建议你联系你的主题开发者。【参考方案3】:

对于您的档案页面数量字段,您需要对代码进行一些更改:

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 文件中。它应该可以工作。

【讨论】:

@JamesDonald 这是您的基础代码,它可以正常工作...我刚刚在 if 语句中添加了 && $product->is_in_stock() 并替换了一些小东西。可能是你在添加这个之前没有删除你的代码……但这不会产生任何错误……

以上是关于当 WooCommerce 档案中的产品缺货时删除自定义数量字段的主要内容,如果未能解决你的问题,请参考以下文章

如何将缺货产品转移到垃圾 Woocommerce?

在WooCommerce中产品缺货时更改单个添加到购物车文本

从 WooCommerce 相关产品自定义 WP 查询中删除缺货产品

woocommerce wordpress中缺货产品的自动无索引

Wordpress Woocommerce 将所有产品更改为缺货

php 排序缺货WooCommerce产品