浏览了一堆类似的问题,但到目前为止都没有成功。
我想显示一个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)对于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'];
}