Intereting Posts
Yii2: Как вы используете именованные параметры в командах консоли? PHP file_get_contents () и файлы XML Преобразование даты mysql (datetime) в формат более датированной даты с использованием php SoapServer отправляет ответ без конверта Как сделать PHP вложенный класс или вложенные методы? Лучший порядок результатов поиска mysql / php почему session_destroy () не работает полностью застрял на RegEx, который работает на тестовой песочнице, но не работает вживую Форма всегда отправляется как GET даже с методом POST Разница в скорости при использовании встроенных строк против конкатенации в php5? Отображать ошибки php при использовании Zend framework Как вставить данные в базу данных mysql из таблицы HTML API-интерфейс Foursquare для ошибки изображения пользователя сайта Как я могу реализовать WS-Security 1.0 в PHP5 с использованием сертификатов? Как получить / установить session_id () или он должен быть сгенерирован автоматически?

WooCommerce: Добавить товар в корзину с переоценкой цены?

$replace_order = new WC_Cart(); $replace_order->empty_cart( true ); $replace_order->add_to_cart( "256", "1"); 

Приведенный выше код добавляет продукт 256 в корзину 1 раз. Но проблема, с которой я сталкиваюсь, заключается в том, что я хочу полностью переопределить цену продукта … насколько я могу судить, единственное, что я могу сделать, это применить купон к Cart.

Есть ли способ полностью переопределить цену на что-то совершенно обычное?

Вот код для переоценки цены продукта в корзине

 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 ) { $value['data']->price = $custom_price; // for WooCommerce version 3+ use: // $value['data']->set_price($custom_price); } } 

Надеюсь, это будет полезно …

Вам нужно ввести инструкцию if для проверки идентификатора продукта в приведенном выше коде:

 add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart_object ) { $custom_price = 10; // This will be your custome price $target_product_id = 598; foreach ( $cart_object->cart_contents as $value ) { if ( $value['product_id'] == $target_product_id ) { $value['data']->price = $custom_price; } /* // If your target product is a variation if ( $value['variation_id'] == $target_product_id ) { $value['data']->price = $custom_price; } */ } } 

Добавьте этот код в любом месте и убедитесь, что этот код всегда исполняемый.

После добавления этого кода, когда вы вызовете:

 global $woocommerce; $woocommerce->cart->add_to_cart(598); 

Только этот продукт будет добавлен с переопределенной ценой, другие товары, добавленные в корзину, будут игнорироваться для переоценки цен.

Надеюсь, это будет полезно.

Я пробовал все вышеперечисленные примеры кода, и последняя версия woocommerce 3.0 не поддерживает ни один из приведенных выше примеров. Используйте ниже код и отлично работайте для меня.

 add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart_object ) { $custom_price = 10; // This will be your custom price foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $cart_item['data']->set_price($custom_price); } } 

После выпуска версии woocommerce версии 3.0.0 цена обновления добавляется в корзину с использованием функции set_price ($ price). Пример приведен ниже:

 add_action( 'woocommerce_before_calculate_totals', 'mj_custom_price' ); function mj_custom_price( $cart_object ) { $woo_ver = WC()->version; $custom_price = 10; foreach ( $cart->cart_contents as $key => $value ) { if($woo_ver < "3.0.0" && $woo_ver < "2.7.0") { $value['data']->price = $custom_price; } else { $value['data']->set_price($custom_price); } } } 

Большое спасибо

Для последней версии WordPress и Woocommerce, пожалуйста, используйте это

 add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart_object ) { foreach ( $cart_object->cart_contents as $key => $value ) { $custom_price = 5; $value['data']->set_price($custom_price); } } 

Чтобы сделать его динамическим (переопределить цену для каждого товара в корзине отдельно), вам необходимо сохранить переопределяемую цену продукта в сеансе с ключом woocommerce_add_to_cart корзины в качестве ключа сеанса с помощью woocommerce_add_to_cart hook.

используя эти значения сеанса, вы можете рассчитать правильную корзину Total и изменить измененную цену в позиции заказа.

Вы можете обратиться к следующему руководству для получения полной информации с примером.

С WooCommerce 2.5 я нашел это двухчастным процессом. Первым шагом является изменение отображения цены времени выполнения при добавлении в корзину через фильтр woocommerce_add_cart_item. Вторая часть – установить постоянные данные сеанса, которые считываются во время проверки через фильтр woocommerce_get_cart_item_from_session. Кажется, это быстрее, чем подключить фильтры итоговых итогов (например, woocommerce_before_calculate_totals), поскольку они очень часто запускаются в WooCommerce.

Подробнее здесь: woocommerce цена изменения при добавлении в корзину

Для eveeryone, который появился здесь от Google. Вышеупомянутое устарело, поскольку я узнал об обновлении до WooCommerce 3.0.1.

Вместо вышесказанного вам теперь нужно использовать set_price вместо price

Вот пример:

 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 ) { $value['data']->set_price = $custom_price; } } 

Надеюсь, это поможет людям в будущем 🙂

Вот как я это сделал, сначала добавляю свою пользовательскую цену в корзину_item_data, которая может сохранять пользовательские данные в элементы корзины, затем я использую woocommerce_before_calculate_totals, петлю корзину и добавляю ранее добавленную цену.

 function add_donation_to_cart() { $cart_item_data = array('price' => $_REQUEST['donate_amount']); $woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data); } add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart ) { foreach ( $cart->cart_contents as $key => $value ) { $value['data']->price = $value['price']; } }