使用Woocommerce中的ajax更新购物车小部件中的详细信息,而无需加载页面


Update details in cart widget without loading page by using ajax in Woocommerce

我正在开发一个woocommerce小部件,它将显示购物车小计、购物车总、购物车项目和运输总,它的工作很好,但我想做的是更新运输总以及购物车总,每当我使用ajax在运输方法之间切换时。目前它只在页面重新加载后更新自己。

您可以使用add_to_cart_fragments过滤器。

我的实现只更新用AJAX显示的项目数量,但它也可以用于更新总数等。这是模板中显示购物车详细信息的正常代码:

<a class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>">
(<?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count); ?>)</a>

这是functions.php中添加的过滤器:

// Update items in cart via AJAX
add_filter('add_to_cart_fragments', 'woo_add_to_cart_ajax');
function woo_add_to_cart_ajax( $fragments ) {
    global $woocommerce;
    ob_start();
    ?>
        <a class="cart-contents" href="<?php echo $woocommerce->cart->get_cart_url(); ?>">(<?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count); ?>)</a>
    <?php
    $fragments['a.cart-contents'] = ob_get_clean();
    return $fragments;
}

确实有一些关于这方面的资源/文档-我记得在编写这段代码时使用了一些作为参考,但它们有点难以谷歌。

对于其他想知道这个的人,WooThemes网站上有官方文档。很抱歉没能在评论中发表这篇文章,我没有足够的声望积分。

代码似乎已经更新了。他们现在使用get_cart_contents_count()而不是cart_contents_count,以及其他。

下面是较新的代码片段,直接从WooThemes文档中复制(你显然可以编辑代码来显示任何你喜欢的购物车信息,但要确保你在两个代码片段中进行相同的编辑):

要在模板中显示购物车内容和总数,请使用如下命令:

<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf (_n( '%d item', '%d items', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>

ajax您的购物车查看器,以便它更新时,一个项目被添加(通过ajax)使用:

<?php
// Ensure cart contents update when products are added to the cart via AJAX (place the following in functions.php)
add_filter( 'woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment' );
function woocommerce_header_add_to_cart_fragment( $fragments ) {
    ob_start();
    ?>
    <a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf (_n( '%d item', '%d items', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a> 
    <?php
    $fragments['a.cart-contents'] = ob_get_clean();
    return $fragments;
}