Динамическое изменение позиции корзины не работает с заказами в WooCommerce 3.0+

Я использую WooCommerce 3.0+, и я установил цену продукта на определенную страницу.

$regular_price = get_post_meta( $_product->id, '_regular_price', true); $buyback_percentage = get_post_meta( $_product->id, '_goldpricelive_buy_back', true); $fixed_amount = get_post_meta( $_product->id, '_goldpricelive_fixed_amount', true); $markedup_price = get_post_meta( $_product->id, '_goldpricelive_markup', true); $buyback_price = ($regular_price - $fixed_amount)/(1 + $markedup_price/100) * (1-$buyback_percentage/100); $_product->set_price($buyback_price); 

Цена обновляется на моей тележке, но когда я нажимаю, чтобы отправить мой заказ, объект заказа, похоже, не получает цену, которую я установил. Он берет начальную цену продукта.

Любая идея о том, как я могу это сделать?

благодаря

Обновлено с get_price() метода get_price()

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

Вот этот функциональный код, протестированный в WooCommerce версии 3.0+:

 add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1); function adding_custom_price( $cart_obj ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Set below your targeted individual products IDs or arrays of product IDs $target_product_id = 53; $target_product_ids_arr = array(22, 56, 81); foreach ( $cart_obj->get_cart() as $cart_item ) { // The corresponding product ID $product_id = $cart_item['product_id']; // For a single product ID if($product_id == $target_product_id){ // Custom calculation $price = $cart_item['data']->get_price() + 50; $cart_item['data']->set_price( floatval($price) ); } // For an array of product IDs elseif( in_array( $product_id, $target_product_ids_arr ) ){ // Custom calculation $price = $cart_item['data']->get_price() + 30; $cart_item['data']->set_price( floatval($price) ); } } } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Затем вы можете легко заменить фиксированные значения в моих поддельных вычислениях динамическими значениями вашего продукта с помощью функции get_post_meta (), как и в вашем коде, поскольку у вас есть товар $product_id для каждой позиции корзины …