当前位置: 首页 > 知识库问答 >
问题:

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

漆雕昊天
2023-03-14

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

我想显示一个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个答案

胥康安
2023-03-14

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'];
}
 类似资料:
  • 如何在Woocommerce购物车页面中的购物车项目名称后添加产品ID? 我知道我需要先不返回,因为这样会把我从函数中拉出来,但我很好奇我该如何去做这件事。

  • 问题内容: 我有上面的代码。 如果我在cart_item上运行print_r,我将得到一个多维数组: 我如何只获得product_id? 我试过$ test = 没用 问题答案: 要获取 foreach循环中的每个购物车商品(对于简单产品): 如果是可变产品,请获取 : 或在两种情况下 ( Woocommerce 3+中 的 Object在哪里) : 更新: 循环外使用产品ID 1)打破循环 (仅

  • 最初,我选择了一个包(Woo订阅) 然后添加了所有详细信息。 但未提交。 回到网站,所以再次购买我需要选择一个包。所以我选择了这个包,并填写了详细信息,然后转到付款包。 现在在我的购物车中,两个包都存在(即我没有第一次购买就选择的包和最近的包) 如何修复此问题,使最新选定的一个在购物车中,而较早的一个在选定最新的一个后立即删除。 我尝试了这个Woocommerce从购物车中删除所有产品,并将当前产

  • 我的php通过echo在最后创建每个产品是 网站上通常动态创建10个产品 所以我为php显示的每个产品都有10个具有相同类或id的按钮 任何关于函数通过post(jquery)将数据发送到cart.php文件而不刷新网站的想法。我必须在$_POST中发送正确的产品id,以便cart.php知道添加了什么。 为什么当我加上 它正在工作,只警告第一个按钮添加到购物车,而不是全部 我是jQuery的新手

  • 问题内容: 单击后,我想重新标记“ 添加到购物车” 按钮,然后将一项添加到购物车, 再添加到购物车中 。 这可能吗? 我有第二个 转到购物车* 按钮的Child-Theme function.php ,并且它正在工作。 * 但是我不知道在将一件商品添加到购物车后如何解决此重新标签问题(商店仅出售一件尺寸不同的商品)。我希望我很清楚。 这是我的代码: 问题答案: 更新: 在下面,您将找到使此重新标记

  • 我有一些自定义代码,添加一个项目到购物车,一个可变产品。如果我把同样的产品加两次,它只是增加了数量。我希望它添加产品作为一个不同的项目在推车中再次。 我该怎么做呢?使用domain.com?add-to-cart=3434&variation_id=4434等链接将项目添加到购物车中。 当该代码将项目添加到购物车时,会导致以下情况: 警告:第291行/home/****/public_html/w

  • 我认为可以通过等待第一个ajax发布成功,然后迭代到下一个产品等方法来解决,直到所有选定的产品都完成ajax发布,然后最终成功。 我只是不知道我该怎么做:)你知道怎么做吗? 这是我的产品表单HTML: 这是jQuery: 和处理Ajax的php函数: 代码已经很好地工作了,只是罪魁祸首:它只是添加1个产品ID和它设置的数量到购物车,然后停止,即使通过设置其他产品的数量选择了一个以上的产品。 有人帮

  • 我有一个正常工作的函数,除了它在购物车中显示两次通知而不是一次。该函数应用折扣并显示通知。该函数查找特定类别的项目添加总数,如果满足折扣金额,则应用折扣并显示通知。现在,即使购物车里只有一件商品,它也会显示两次通知。 我已尝试添加,但这将清除我需要的其他通知,如类别上最小订单金额的最小-最大通知。如果我在函数开头或任何foreach语句中添加,它将在显示之前清除其他最小/最大通知。 以下是我已经看