WooCommerce add_to_cart() с пользовательской ценой

2 нояб. 2017 г., 23:45:16
Просмотры: 20.4K
Голосов: 3

Я использую этот метод в комбинации с ajax-запросом для добавления товара из конфигуратора в корзину:

$woocommerce->cart->add_to_cart($p_id, $p_quantity, $p_var_id, $p_var_name);

Как я могу использовать этот метод для установки рассчитанной пользовательской цены? Это возможно?

С уважением,

Марвин

1
Комментарии

Я попробовал на прошлой неделе, но у меня не получилось. Я буду следить за этим вопросом.

sakarya sakarya
3 нояб. 2017 г. 00:23:04
Все ответы на вопрос 1
4
12

В настоящее время нет прямого способа добавить пользовательскую цену для товара, который добавляется через функцию $woocommerce->cart->add_to_cart (Документация), но у нас есть обходной путь, который я объясняю в коде ниже.

global $woocommerce;
$custom_price = 1000;
// Данные элемента корзины для отправки и сохранения в заказе
$cart_item_data = array('custom_price' => $custom_price);   
// Функция WooCommerce для добавления товара в корзину, проверьте также её документацию 
// Нам здесь нужны только $product_id и $cart_item_data, остальное может быть по умолчанию.
$woocommerce->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation, $cart_item_data );
// Пересчитать итоги
$woocommerce->cart->calculate_totals();
// Сохранить корзину в сессии
$woocommerce->cart->set_session();
// Возможно установить куки корзины
$woocommerce->cart->maybe_set_cart_cookies();

В вашем файле функций вы можете разместить следующий код:

function woocommerce_custom_price_to_cart_item( $cart_object ) {  
    if( !WC()->session->__isset( "reload_checkout" )) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
            if( isset( $value["custom_price"] ) ) {
                // Для версий WooCommerce ниже 3
                //$value['data']->price = $value["custom_price"];
                // Для версий WooCommerce 3 и выше
                $value['data']->set_price($value["custom_price"]);
            }
        }  
    }  
}
add_action( 'woocommerce_before_calculate_totals', 'woocommerce_custom_price_to_cart_item', 99 );

И всё готово!

30 янв. 2018 г. 14:38:43
Комментарии

Отлично! Это решило мою проблему. Спасибо

Zaheer Abbas Zaheer Abbas
9 июл. 2020 г. 15:14:31

и как отобразить cart_item_data на странице корзины? а также в email заказа и на странице истории заказов?

Rahul Shinde Rahul Shinde
3 сент. 2020 г. 15:03:00

@RahulShinde пожалуйста, следуйте по этой ссылке https://stackoverflow.com/questions/54505642/display-and-save-added-custom-cart-item-data-on-woocommerce-cart-checkout-and-o

AHSAN KHAN AHSAN KHAN
3 сент. 2020 г. 15:34:41

При реализации приведенного выше кода он работает для пользовательской цены, но для других товаров устанавливает цену в 0. У вас есть какие-либо идеи, почему так происходит?

David Coder David Coder
4 апр. 2024 г. 11:11:46