woocommerce_cart_calculate_fees либо ломает шлюз paymeny, либо неправильно применяется - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь заключить сделку с печатью карты, где за каждый десятый предмет, который вы покупаете в определенных категориях и весовых категориях, вы получаете штамп. Затем этот штамп должен автоматически применяться при следующем посещении магазина и освобождать продукт, если продукт в вашей кассе соответствует предыдущим условиям.

Это делается (хотя и не работает гладко), применяя отрицательную комиссиюравную цене первого продукта в заказе.

Я хотел бы указать это на странице оформления заказа.

У меня есть цикл, который просматривает элементы корзины для проверки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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...