Я пытаюсь заключить сделку с печатью карты, где за каждый десятый предмет, который вы покупаете в определенных категориях и весовых категориях, вы получаете штамп. Затем этот штамп должен автоматически применяться при следующем посещении магазина и освобождать продукт, если продукт в вашей кассе соответствует предыдущим условиям.
Это делается (хотя и не работает гладко), применяя отрицательную комиссиюравную цене первого продукта в заказе.
Я хотел бы указать это на странице оформления заказа.
У меня есть цикл, который просматривает элементы корзины для проверкиeglible products и рассчитайте скидку в зависимости от того, сколько бесплатных продуктов доступно пользователю. Эта часть работала нормально, и я попытался использовать ее в своей собственной функции, чтобы затем вызывать ее в хуке woocommerce_cart_calculate_fees как $ charge.
И это сработало (вроде), но сломало остальную частьсайт, и сбой на платежном шлюзе. Я установил тестовый шлюз для заказа администратора, чтобы проверить, смогу ли я пройти через него, и он сделал это, и плата была правильно рассчитана, но я все равно не смогу перейти на страницу с благодарностью.
Я использую Divi кактема и код ниже находятся в functions.php моей дочерней темы.
Я думаю, что я пробовал почти все возможные конфигурации этого кода, но безрезультатно. Может быть, я упускаю что-то решающее.
function add_fee() {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if (! is_checkout ) {
return;
}
global $woocommerce;
$GLOBALS['samlet_rabat'] = 0;
$samlet_pris = 0;
$user = get_current_user_id();
$nu_gratis = get_field('gratis_produkt', 'user_'. $user);
$GLOBALS['a'] = $nu_gratis;
// Loops through order
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
$product_weight = $cart_item['data']->attributes['pa_vaegt'];
if ( has_term( 'the', 'product_cat', $cart_item['product_id'] ) && $product_weight == '250g' || has_term( 'kaffe', 'product_cat', $cart_item['product_id'] ) && $product_weight == '500g' ) {
if ($GLOBALS['a'] == 0) {
break;
}
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
if ( did_action( 'checkforcat_checkout' ) >= 2 ) {
return;
}
$product_id = $cart_item['data']->id;
$samlet_pris = $samlet_pris + $cart_item['data']->price;
}
}
$charge = ($samlet_pris * -1);
$name = 'Klippekort rabat';
$woocommerce->cart->add_fee( __('Klippekort'), $charge, true);
}
add_action( 'woocommerce_cart_calculate_fees', 'add_fee');
Вещи, которые я пробовал:
- Рассчитать комиссионный сбор в качестве глобальной переменной php и / или в качестве сеанса и ввести его таким образом. ,К сожалению, woocommerce_cart_calculate_fees работала до того, как все остальные хуки на странице оформления заказа и плата не была добавлена.
- Вызов вычисления из хука woocommerce_cart_calculate_fees: казалось, правильно добавлял комиссию, но привел к краху шлюза paymeny.
Я, должно быть, упускаю что-то очевидное, потому что этот хук кажется довольно бесполезным, если вы не можете внести в него изменения при оформлении заказа.