【发布时间】:2017-12-10 11:40:11
【问题描述】:
有什么方法可以增加购物车中特定产品的数量吗?
假设我在购物车中有多个产品,其中一个产品的数量为“3”,我想将数量乘以“5”,因此 [3*5] 并将数量字段更新为“15”。
我只想为购物车中的一种特定产品而不是全部。
【问题讨论】:
标签: php wordpress woocommerce
有什么方法可以增加购物车中特定产品的数量吗?
假设我在购物车中有多个产品,其中一个产品的数量为“3”,我想将数量乘以“5”,因此 [3*5] 并将数量字段更新为“15”。
我只想为购物车中的一种特定产品而不是全部。
【问题讨论】:
标签: php wordpress woocommerce
这取决于您想在何时何地更改它。
我可以想到两种不同的方法:
PHP:
$woocommerce->cart->set_quantity( product_id , product_quantity );
JS + AJAX:
您可以在此处找到可行的解决方案,只需尝试使其适应您的需求:
WooCommerce - change QTY triggers AJAX call in cart
编辑:
我编写了一个简单的 jQuery 示例。您可以在用户在购物车金额输入中输入数量时实时执行此操作。用户输入任何数量,当他/她在外面点击或离开输入焦点时,数量会自动更改(x5)。
为了使用它,您必须在 Wordpress 中编辑购物车模板。我强烈建议使用子主题并关注Woocommerce template best practices。
$("#input-value").focusout(function() {
var value = parseFloat($(this).val());
$(this).val(value*5);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
Quantity: <input type="text" id="input-value" />
为了只针对特定产品,您可以在购物车模板中使用一些 PHP 将“乘法”类添加到数量容器:
<?php if($_product->id == your_id) {
?>
<td class="product-quantity multiply" data-title="<?php _e( 'Quantity', 'woocommerce' ); ?>">
<?php
}else{
?>
<td class="product-quantity" data-title="<?php _e( 'Quantity', 'woocommerce' ); ?>">
<?php
}
?>
<?php
if ( $_product->is_sold_individually() ) {
$product_quantity = sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key );
} else {
$product_quantity = woocommerce_quantity_input( array(
'input_name' => "cart[{$cart_item_key}][qty]",
'input_value' => $cart_item['quantity'],
'max_value' => $_product->backorders_allowed() ? '' : $_product->get_stock_quantity(),
'min_value' => '0'
), $_product, false );
}
echo apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key, $cart_item );
?>
</td>
【讨论】:
$woocommerce->cart->set_quantity( product_id , product_quantity * 5 );,但每次它都将数量与前一个值相乘,而不是与购物车输入的值相乘,所以我没有发布答案。
cart.php 中,只有这一行可以解决问题<td class="product-quantity <?= $product_id == $your_id? 'multiply': ''; ?>" data-title="<?php esc_attr_e( 'Quantity', 'woocommerce' ); ?>">,不需要其他 PHP 代码。