簡體   English   中英

自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM