自定义woocommerce购物车AJAX更新


Custom woocommerce Cart AJAX Update

我正试图AJAXify我的Woocommerce购物车,但我失败了,我真的找不到任何帮助或文档(我搜索了几天)。所以我们非常感谢任何帮助。

我尝试了两种方法:

  1. 自定义AJAX函数当更改数量(在购物车页面上)时,触发一个AJAX调用(-> admin-ajax.php),它触发我的functions.php中的一个函数:

    function setQty() {
        global $woocommerce;
        WC()->cart->set_quantity( $_POST['itemKey'], $_POST['quantity'], true);
        echo json_encode(array('totalCount'=>WC()->cart->get_cart_contents_count(), 'total'=>$woocommerce->cart->total)); }
    

返回的JSON String包含购物车中正确的商品数量,但总金额为0。当我重新加载页面时,更改的数量没有保存。

也一样
WC()->cart->add_to_cart($product_id, $quantity) or adding WC()->cart->calculate_totals()

我尝试过这种方式,所以我可以格式化我需要更新我的购物车我想要的值。为了保存购物车更新,我在这里遗漏了什么?

woocommerce内置的AJAX更新功能不会触发,因为我有一个自定义设计,我认为它需要一个特定的html结构才能正常工作,但我找不到任何文档或示例。此外,我需要更新的值(总金额,总计数等)在自定义格式。到目前为止,它只是传递给我"更新的片段"作为预定义的html代码。我需要如何构建我的cart.php的HTML代码,ajax更新将工作?我如何改变返回值?

提前谢谢你。

我不确定您想更新什么,但我猜您想更新购物篮中产品的总数。

替换并更新HTML

假设你有一个div,总金额在:

<div class="cart-totals"><?php echo WC()->cart->get_cart_contents_count(); ?></div>

将此添加到functions.php:

// Mini Cart update with AJAX
add_filter( 'woocommerce_add_to_cart_fragments', 'custom_cart_count_fragments', 10, 1 );
function custom_cart_count_fragments( $fragments ) {
    $fragments['div.cart-totals'] = '<div class="cart-totals">' . WC()->cart->get_cart_contents_count() . '</div>';
    return $fragments;
}

注意:您正在替换未添加

您要创建的是一个迷你购物车/柜台,还是一个完整的页面来查看/删除产品?

如果它是一个你想要的迷你推车/推车计数器,我已经在https://github.com/samisonline/ajax_cart下为你创建了一个具有基本功能的回购。这可能不是您想要的格式,但它显示了工作中的woocommerce功能,以及AJAX工作所需的标记!