У магазині електронної комерції:
На домашній сторінці відображаються предмети, під кожним із яких є кнопка "Додати в кошик". Після натискання цієї кнопки предмет додається в кошик. Якщо цю кнопку знову натиснути, кількість предмета, який вже є у кошику, збільшується на 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...
логіки.
Отже, я хочу запустити окремий код, коли натиснути кнопку "Додати в кошик", яка знаходиться в циклі (незалежно від місця розташування, домашню сторінку, архіви тощо) та запустити інший код, якщо натиснути кнопку "Додати в кошик". що натискається на сторінці "Єдиний продукт". Як я можу цього досягти?
Очікуючи щось подібне:
- Якщо натиснути кнопку, що з’являється всередині циклу, -> Зробити це.
- Якщо натиснути кнопку, що відображається на одній сторінці продукту -> Зробіть це.