提问者:小点点

WooCommerce AJAX Add-to-Cart:如何检索上次添加到购物车的项目的id,并在通知中使用它?


浏览了一堆类似的问题,但到目前为止都没有成功。

我想显示一个WC通知命名的最后一个项目添加到购物车在一个常规的页面。

通知已经启动并正在运行,然而,到目前为止,我还不能识别最后一个添加到购物车的项目的ID。

我试过了

    $items = WC()->cart->get_cart();
    $ids = array();
    foreach($items as $item => $values) {
        $_product = $values['data']->post;
        $ids[] = $_product->ID;
    }
    $last_product_id = end($ids);
    $added_product = wc_get_product( $last_product_id );
    $added_product_name = $added_product->get_title();

但是,正如我所了解的,在AJAX调用期间,cart内容不会得到更新。 获取产品ID最简单的方法应该是包含它的AJAX参数,但是不能通过$_GET读取它。

有人知道通过WC Hook/jQuery检索最后一个添加项目的产品ID的方法吗?


共1个答案

匿名用户

1)对于Ajax添加到购物车:

A)在PHP中,您可以使用以下挂钩函数,其中产品ID是主要参数:

add_action( 'woocommerce_ajax_added_to_cart', 'action_ajax_added_to_cart', 100, 1 );
function action_ajax_added_to_cart( $product_id ) {
    // Do something with $product_id
}

B)使用Javascript(jQuery):

add_action( 'wp_footer', 'ajax_added_to_cart_event' );
function ajax_added_to_cart_event() {
    // Not on checkout
    if( ! is_checkout() ):

    // Jquery code start
    ?>
    <script>
    jQuery( function($) {
        if ( typeof wc_add_to_cart_params === 'undefined' )
            return false;

        $(document.body).on( 'added_to_cart', function( event, fragments, cart_hash, $button ) {
            var product_id = $button.data('product_id');
            console.log( product_id );
        }
    });
    </script>
    <?php
    endif;
}

2)对于普通添加到购物车(重新加载页面):

A)在WC_CART对象中,可以使用以下内容:

$cart_items = WC()->cart->get_cart();
$last_item  = end($cart_items);
$product_id = $last_item['data']->get_id(); // The product ID

B)来自过帐数据:

if( isset($_POST['add-to-cart']) && isset($_POST['quantity']) ) {
    // Get added to cart product ID (or variation ID) and quantity (if needed)
    $quantity   = $_POST['quantity'];
    $product_id = isset($_POST['variation_id']) ? $_POST['variation_id'] : $_POST['add-to-cart'];
}