WooCommerce: пользовательская скидка исчезает при оформлении заказа - PullRequest
0 голосов
/ 18 февраля 2019

Я уже некоторое время пытаюсь внедрить пользовательскую скидку в своем магазине WooCommerce, либо зацикливая все продукты и устанавливая новую цену с set_price(), либо добавляя отрицательную комиссию с add_fee().Оба подхода работают на странице корзины, но при переходе к оформлению заказа я вижу сниженную цену в течение нескольких секунд, но когда вращающееся колесо завершено, прежняя обычная цена заменяет скидки (плата полностью исчезает).

Пример многих кодов, которые я пробовал в моих дочерних функциях. Php:

add_action('woocommerce_before_calculate_totals', 'cart_item_discount', 10, 1 );

function cart_item_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop Through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        $original_price   = $cart_item['data']->get_price(); // Get original product price
        $discounted_price = $original_price / 2; // 50 % of discount
        $cart_item['data']->set_price( $discounted_price );
    }
}

Я устранял неполадки, и, насколько я могу судить, AJAX-вызов через ?wc-ajax=update_order_review выполняется 1-2секунд после входа в кассу, что является причиной перезаписи.Вызов возвращает статус 200 с фрагментами, и эти фрагменты включают в себя прежнюю обычную цену вместо новых.

Как отключить этот вызов AJAX на странице оформления заказа, чтобы код скидки работал правильно?

Я пробовал как на локальном, так и на производственном сервере.Я попытался установить новую свежую установку WordPress / WooCommerce с новой базой данных, удалил все остальные плагины.Использование WordPress 5.0.3, WooCommerce 3.5.4, дочерняя тема Storefront 2.4.2.

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