![](/img/trans.png)
[英]Add a custom chosen date to cart item on add to cart action in Woocommerce
[英]Custom Woocommerce cart add has wrong item count
在提交自定義添加到購物車表單后,我試圖通過wp_loaded操作將產品添加到woocommerce購物車。
add_action( 'wp_loaded', 'custom_process_form' );
function custom_process_form(){
global $woocommerce;
if(isset($_POST["addcoupon"])){
foreach($_POST as $key=>$value){
if($key=="addcoupon"){
continue;
}
$valarr=explode("_",$key);
if ($valarr[0]=="couponid"){
$woocommerce->cart->add_to_cart($valarr[1],1);
$count++;
}
}
}
}
它工作正常,除了第一次加載時,購物車認為我添加了2個產品,而不是1個。由於某種原因,它運行了WC_Cart->calculate_totals()
兩次,並且$this->cart_contents_count
未重置為零,因此數量兩次。 (當我重新加載頁面時,購物車會顯示正確數量的商品)
用自定義表單添加產品的正確方法是什么? 我找不到任何示例。 我使用了錯誤的動作嗎?
我在自己的安裝上進行了試驗,可以確認同樣的事情正在發生。 對我來說, calculate_totals()
由添加到購物車過程調用一次,然后由WooCommerce訂閱插件再次從會話中獲取購物車調用。 你有安裝這個插件嗎?
話雖如此,我認為調用calculate_totals()
確實不是問題。 真正的問題是$this->cart_contents_count
應該重置。 我通過將此代碼添加到functions.php
來解決此問題。
function reset_quantities( $cart )
{
$cart->cart_contents_count = 0;
}
add_action( 'woocommerce_before_calculate_totals', 'reset_quantities' );
編輯 :實際上這對我不起作用。 原因是WooCommerce Subscriptions插件通過“ woocommerce_before_calculate_totals”操作調用calculate_totals()
。 這樣可以防止觸發同一動作的其他功能。 這張票上提到了這一點。 https://core.trac.wordpress.org/ticket/17817
試試這個
function reset_quantities( $cart_object )
{
$cart = $cart_object->get_cart();
$cart_object->cart_contents_count = 0;
foreach ( $cart as $cart_item_key => $values ) {
$cart_object->cart_contents_count += $values['quantity'];
}
}
add_action( 'woocommerce_after_calculate_totals', 'reset_quantities', 10, 1 );
EDIT2我只是在Github上查看了WooCommerce的最新提交,而calculate_totals()
發生了很大變化。 您可能想要嘗試下載該文件,以查看它是否可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.