Скидка на товары в корзине Woocommerce сбрасывается при оформлении заказа - PullRequest
0 голосов
/ 04 февраля 2019

Я пытался ввести скидку в своем магазине с помощью следующего кода:

add_action('woocommerce_before_calculate_totals', 'set_discount', 10 );

function set_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    // Loop Through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // 50% items discount
        $cart_item['data']->set_price( $cart_item['data']->get_price() / 2 ); 
    }
}
  • Код работает на странице корзины, скидка применяется как и положено
  • Код работает на странице оформления заказа в течение секунды или двух, НО, когда загрузочный счетчик завершил, скидка исчезает, и отображается первоначальная цена

Кажется, установленная цена перезаписывается впроверка по некоторому стандартному запросу AJAX, в котором повторно используется первоначальная цена или что-то еще.Я попытался использовать add_fee () с тем же результатом, я также попытался деактивировать все плагины (кроме, конечно, woocommerce), и я попытался перейти на другую тему - ничего не работает!

Используя Wordpress 5.0.3,Woocommerce 3.5.4, дочерняя тема Storefront 2.4.2


ОБНОВЛЕНИЕ: Добавлены скриншоты .

1) Это то, что должно быть показано наОформить заказ и отображается в течение 1-2 секунд:

SCREENSHOT 1


2) Это то, что показанопосле завершения загрузки прядильщика - первоначальные цены:

SCREENSHOT 2

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Правильный код, который будет использоваться начиная с Woocommerce 3.2+, чтобы избежать проблем и ошибок:

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 );
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает (Проверено на последних версиях: Wordpress 5.0.x | Woocommerce 3.5.x | Storefront 2.4.x)

Если это не работает, это потому, что некоторые другиевещи или настройки взаимодействуют с ним.Сначала нужно проверить Woocommerce> Status для красных элементов (где все переопределенные шаблоны, в конце, должны быть обновлены) .

См .: Изменение цен на товары в корзине Woocommerce 3

0 голосов
/ 04 февраля 2019
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $custom_price = ($value['data']->price)/2;
        //$value['data']->price = $custom_price;
        // for WooCommerce version 3+ use: 
         $value['data']->set_price($custom_price);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...