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

时间:2013-05-02 11:35:47

标签: php wordpress woocommerce

我正在开发一个woocommerce小部件,它将显示购物车小计,购物车总数,购物车商品和运费总计其工作正常但我想要做的是更新运费总额以及购物车总额,每当我在运输方式之间切换时使用ajax。目前它仅在页面重新加载后才更新。有没有可用于此目的的钩子?

2 个答案:

答案 0 :(得分:3)

您可以使用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;
}

肯定有一些关于此的资源/文档 - 我记得在编写此代码时使用了一些资源/文档,但是谷歌搜索它们有点困难。

答案 1 :(得分:0)

对于其他任何想知道这一点的人,有关于WooThemes网站HERE的官方文档。对于无法在评论中发布此内容而道歉,我没有足够的声誉点。

代码似乎已经更新了。他们现在使用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;
}