Мне нужно рассчитать общую сумму, которую будет стоить корзина с добавлением нескольких продуктов и купонов. Мне нужно получить эту сумму без изменения глобального WC () -> cart . Поэтому я думал создать временную корзину, добавить все предметы и купоны, а затем вернуть WC_Cart: get_total ();
Вот мой код:
//5438 is my product (simple subscription, $55 with a $50 signup fee)
//product_schedule_discount is the coupon code that removes 100% of the signup fee
$tmpCart = new WC_Cart();
$tmpCart->add_to_cart( 5438, '1', '0', array(), array() );
$tmpCart->apply_coupon('product_schedule_discount');
$tmpCart->calculate_totals( );
$cartTotal = $tmpCart->get_total();
$tmpCart->remove_coupon('product_schedule_discount');
return $cartTotal;
Этот метод работает, когда я получаю сумму, без добавления купона. Но когда я хочу добавить купон, кажется, что он применяется к сеансу пользователей, потому что, когда я перехожу на страницу корзины (полностью отделенную от того, где я использую приведенный выше код, я вижу сообщение «Купон успешно загружен». И когда я обновляю страницу, она исчезла.
Вторая проблема заключается в том, что он не возвращает новый итог (с примененными купонами) до тех пор, пока я не запрослю его снова.
Почему это показывает мое сообщение на странице моей корзины? Разве это не относится к корзине, о которой я говорю? В этом случае моя $ tmpCart ?
Мне нужно получить общую сумму корзины, потому что я пишу свой собственный модуль, который позволяет моим клиентам создавать макеты.
Вот ссылка на методы, которые я использую:
WC_Cart :: get_totals
WC_Cart :: apply_coupon