在电子商务商店中:
主页上显示了一些项目,每个项目下方都有一个“添加到购物车”按钮。单击此按钮后,该项目即被添加到购物车。如果再次单击此按钮,则购物车中已经存在的物料数量将增加1。我相信这是循环。到目前为止,一切都很好。
在“单一产品”页面上,有一个“添加到购物车”按钮。单击此按钮后,该项目将添加到购物车。还有一个“数量”输入文本框,可用于更改数量。也可以
问题:
我需要区分在循环中单击的“添加到购物车”按钮(当前在主页上,但也可以在其他页面上使用,例如“存档”页面等)与单击的“添加到购物车”按钮之间在“单一产品”页面上。基于这种差异,这是我需要做的:
- 如果单击了循环中出现的“添加到购物车”按钮,请使用来获取购物车中已经存在的此项目的数量,将其
$cart_item_key
递增1,然后将其发送到自定义函数,该函数将进行其他处理并保存详细信息重新购物。 - 如果单击了“单个产品”页面中出现的“添加到购物车”按钮,请使用抓住购物车中已经存在的该商品 的数量
$cart_item_key
,将其乘以3,然后将其发送到自定义函数,该函数将进行其他处理并保存详细信息再次放入购物车。 - 在上述两种情况下,都会根据不同的逻辑更改“数量”,并且需要将该“数量”发送到自定义函数调用。
我尝试过的是:
我尝试了以下代码:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
上面的代码的问题在于,如果我没有if... else if...
逻辑,那么无论“添加到购物车”按钮位于何处,代码都将执行。换句话说,是我单击循环(主页,存档页面或使用该循环的任何页面)中的“添加到购物车”按钮,还是单击“单一产品”页面中的“添加到购物车”按钮,上面的代码在没有if... else if...
逻辑的情况下执行。
因此,我想在单击位于循环中的“添加到购物车”按钮时运行单独的代码(无论其位置如何,无论是主页,存档等),并且在“添加到购物车”按钮时运行不同的代码单击位于“单个产品”页面上。我该如何实现?
期望这样的事情:
- 如果单击循环内出现的按钮->执行此操作。
- 如果单击出现在“单一产品”页面中的按钮->执行该操作。