Как мне написать веб-крючок для WordPress, который позволит мне использовать один код купона для двух отдельных скидок? - PullRequest
1 голос
/ 17 января 2020

У меня есть клиент, который хочет добавить купон для проверки WordPress / WooCommerce. Обычно я просто go для WooCommerce> Купоны и создать купон.

Однако они хотят, чтобы один код купона давал скидку на продукт на ДВА отдельных продукта. Продукты в этом случае являются входными билетами.

  • кодовое название купона = "COUPON1"
  • "ПРОДУКТ A" - 15,95 долл. В будние дни (ID продукта = 2846)
  • "ПРОДУКТ А" - 17,95 долл. выходные дни (код продукта = 2848)
  • «ПРОДУКТ Б» - 10,95 долл. США в будние дни (код продукта = 2847)
  • «ПРОДУКТ Б» 12,95 долл. США в выходные дни (ИД продукта = 2849)
  • ПРОДУКТ Скидка составляет $ 11,95 для билетов в будние дни и на выходные
  • Скидка ПРОДУКТА B составляет $ 8,95 для билетов в будние и выходные дни

Рабочий процесс:

  1. Пользователь добавляет 1 билет на ПРОДУКТ А в корзину
  2. Пользователь добавляет 1 билет на ПРОДУКТ Б в корзину
  3. Пользователь вводит купон COUPON1 в поле скидки
  4. Хук WordPress замечает эти продукты в корзину по их идентификатору и замечает, что купон COUPON1 был применен
  5. WordPress создает цены со скидкой для ПРОДУКТОВ A и B
  6. Итог теперь показывает $ 11,95 + $ 8,95 = $ 20,90

Я могу создать один код купона на выходные за $ 15,95 и выходные kday билеты, но они не могут быть применены ко второму продукту (ПРОДУКТ B).

Скидка до $ 11,95 должна применяться, если купон применен, и если любой из идентификаторов продукта 2846 или 2848 находится в корзине ,

Скидка до $ 8,95 должна применяться, ЕСЛИ купон применен, ИЛИ любой из идентификаторов продукта 2847 или 2849 находится в корзине.

Я подумал, что, вероятно, можно написать веб-крючок, который сделает это для меня.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вот что я сделал, если кто-то еще захочет сделать это в будущем:

  1. создать купон в WooCommerce> Купоны, назначить его 4 товарам, привязанным к этому купону, но дал это скидка 0 долларов. Этот купон будет активирован на следующем шаге.
  2. В плагине W C Ценообразование и скидки> вкладка Корзина со скидками создайте одно правило для каждого из продуктов со своей фиксированной скидкой на элемент, назначьте это правило для для отдельного продукта (ie ID продукта = 2846 - скидка 4 доллара США) и при условии, что COUPONS APPLIED = COUPON1
  3. делают то же самое для каждого из идентификаторов продукта
  4. в корзине, в которой он будет показать строку с именем купона, когда она была применена, поэтому я просто спрятал эту строку, используя CSS display: none для класса .coupon-COUPON1
  5. Убедитесь, что на вкладке Скидки корзины * 1012 включен параметр APPLY ALL APPLICABLE RULES *
  6. Теперь каждое из правил строк показывает, когда эти продукты находятся в корзине, и для лучшей стилизации строк я добавил тег разрыва в заголовок правила (ie Купон: COUPON1 [br] Скидка для продукта 2846), а затем с CSS добавлена ​​высота строки: 1,75em для класса .cart-discount
0 голосов
/ 19 января 2020

Не думаю, что это можно сделать одним кодом купона. Сначала я подумал, что вам нужен один код купона для автоматических смен в будние и выходные дни, но невозможно иметь разные скидки на два разных продукта.

Что вы можете сделать, так это динамически добавить второй купон на лету , Имейте «секретный» купон на бэкэнде, который будет контролировать только Продукт B (используя ограничения по купонам - выберите Продукт B только для этого).

Затем добавляйте и корректируйте купон динамически каждый раз, когда Продукт B находится в корзине:

define('PRODUCT_B_ID', 2487);
add_filter( 'woocommerce_add_to_cart_handler', 'apply_secret_coupon', 50, 2);

function apply_secret_coupon($product_type, $product){
    if ($product->get_id() == PRODUCT_B_ID){
        $calculated_discount_amount = 15.22;
        $secret_coupon     = new WC_Coupon('MySecretCoupon');
        $secret_coupon->set_amount($calculated_discount_amount);
        $secret_coupon->save();
        WC()->cart->apply_coupon('MySecretCoupon');
    }
 return $product_type;
}

Я заметил, что вы используете несколько идентификаторов продуктов. Этот код может дать вам решение, если вы измените его для своих нужд.

...