【发布时间】:2023-03-14 02:03:01
【问题描述】:
我有一个 Woo Commerce 商店,它有一个自定义的“快速商店”页面。此页面输出特定类别的所有产品。它允许用户在他们想要购买的任何物品旁边增加数量。然后,他们单击“将所选项目添加到购物车”按钮。这将获取表单数据,将其与商店产品进行匹配,将其整理好,然后对其进行迭代以将每个产品添加到购物车中。最后,它将用户重定向到购物车页面。
发生的情况是,有时我们使用快速商店,但当我们被重定向时,有些商品丢失了。但是,我们总是会收到一条消息,说明该项目已被添加。
我们注意到,如果在使用快速商店之前购物篮是空的,那么它有时可以正常工作,但有时它会显示为空,直到我们刷新然后物品出现。
如果篮子里已经有一些物品,那么有些物品会丢失,刷新也无济于事。
在处理原始 $_POST 数据之后,我们最终得到了一个类似以下的数组:
Array ( [0] => Array ( [category_id] => 1075 [product_id] => 27020 [quantity] => 1 [attributes] => Array ( [colour] => Navy [size] => Large ) [variation_id] => 38172 ) [1] => Array ( [category_id] => 1075 [product_id] => 27550 [quantity] => 1 ) )
然后我们如下迭代:
// Add products to the cart
foreach ($products_to_add as $product) {
$passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $product['product_id'], $product['quantity']);
if (isset($product['variation_id'])) {
if ($passed_validation && false !== WC()->cart->add_to_cart($product['product_id'], $product['quantity'], $product['variation_id'], wc_get_product_variation_attributes($product['variation_id']))) {
wc_add_to_cart_message($product['product_id']);
}
} else {
if ($passed_validation && false !== WC()->cart->add_to_cart($product['product_id'], $product['quantity'])) {
wc_add_to_cart_message($product['product_id']);
}
}
}
在这个循环之后,我们有一些额外的位,然后是重定向:
// Calculate totals
WC()->cart->calculate_totals();
// Save cart to session
WC()->cart->set_session();
// Set cookies if needed
WC()->cart->maybe_set_cart_cookies();
wp_safe_redirect( wc_get_cart_url() );
exit();
我真的不认为这是产品问题。我认为这可能是我在上面发布的几行代码的问题,但我不能 100% 确定在预先在循环中以编程方式将所有项目添加到购物车后应该运行什么。
任何对 WooCommerce 有深入了解的人都可以帮助我们吗?
谢谢。
【问题讨论】:
-
曾经我有几乎相同的症状。就我而言,原因是兑现插件。排除与购买过程相关的所有路径解决了这个问题。 Javascript 在客户端提供正确的消息,但后端生成的内容(包括购物车/会话状态)可以兑现。
标签: php wordpress woocommerce