В настоящее время я разрабатываю интернет-магазин, где мне нужно было сделать отдельную функцию цены. До сих пор с помощью хуков woocommerce мне удалось манипулировать ценой как в корзине, так и на кассе, это работает без каких-либо проблем. Крючки, которые я использовал woocommerce_cart_item_price
, woocommerce_cart_item_subtotals
, woocommerce_cart_subtotal
а также woocommerce_cart_total
,
Теперь мы подошли к моей проблеме, которую мне нужно решить в самое ближайшее время. Цена из моей пользовательской функции не включена в заказ woocommerce. Итак, есть ли ловушка для манипулирования ценами товаров в заказе, прежде чем woocommerce создаст заказ?
Я смотрел на https://docs.woocommerce.com/wc-apidocs/hook-docs.html
но безуспешно
Откуда Woocommerce получает цену при создании заказа? Метаполе _price, woocommerce_get_price
крюк, тележка или что-то еще. Буду очень признателен, если кто-нибудь сможет мне это объяснить. Я считаю, что woocommerce не очень соответствует тому, откуда она получает цену.
Пожалуйста, задавайте вопросы, если вы не понимаете мою проблему или мой относительно плохой английский. Заранее спасибо.
Я использую woocommerce_get_price
Крюк, когда вы его измените, эта измененная цена будет использоваться для корзины для расчета общей суммы (цена * кол-во).
После размещения заказа WooCommerce рассчитывает цену продукта на основе итоговой суммы и кол-во, если вы измените одно из 2 значений (итоговая или кол-во), это изменит цену продукта.
Другими словами, цена является динамической после создания заказа.
Редактировать:
Добавлен способ изменения цены
function change_price( $cart ) {
// Exit function if price is changed at backend
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart->get_cart() as $key => $item ) {
$item['data']->set_price( $custom_price );
}
}
add_action( 'woocommerce_before_calculate_totals', 'change_price', 10, 1);
Других решений пока нет …