添加产品数量字段限制在 Woocommerce 商店循环中的可用数量
Add product quantity field limited to the available quantity in Woocommerce shop loop
在 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,则隐藏数量字段。如果产品缺货,该按钮将被禁用,显示 "Out of stock":
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 文件。已测试并有效。
在 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,则隐藏数量字段。如果产品缺货,该按钮将被禁用,显示 "Out of stock":
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 文件。已测试并有效。