Мне нужно изменить общий вес заказа на веб-сайте woocommerce.
Например: у меня есть 3 продукта в корзине: 1 – 30 г; 2 – 35; 3 – 35 г; всего = 30 + 35 + 35 = 100 г, но я хочу добавить вес упаковки в общий вес (30% от общего веса).
Пример: ((30 + 35 + 35) * 0,3) + (30 + 35 + 35) = 130 г
Я могу рассчитать его, но как изменить общий вес от 100 г до 130 г.
Для получения общего веса я использую get_cart_contents_weight (), но я не знаю, как установить новое значение.
Крючок в правильном действии фильтра
Давайте посмотрим на функцию get_cart_contents_weight()
:
public function get_cart_contents_weight() { $weight = 0; foreach ( $this->get_cart() as $cart_item_key => $values ) { $weight += $values['data']->get_weight() * $values['quantity']; } return apply_filters( 'woocommerce_cart_contents_weight', $weight ); }
Существует крючок фильтра, который мы можем использовать: woocommerce_cart_contents_weight
Поэтому мы можем добавить функцию к этому фильтру:
add_filter('woocommerce_cart_contents_weight', 'add_package_weight_to_cart_contents_weight'); function add_package_weight_to_cart_contents_weight( $weight ) { $weight = $weight * 1.3; // add 30% return $weight; }
Чтобы добавить вес пакета к каждому продукту отдельно, вы можете попробовать следующее:
add_filter('woocommerce_product_get_weight', 'add_package_to_product_get_weight'); function add_package_to_product_get_weight( $weight ) { return $weight * 1.3; }
Но не используйте оба решения вместе.
Он работает в моем конце. Обновить общий вес до нового значения веса.
add_action('woocommerce_cart_collaterals', 'myprefix_cart_extra_info'); function myprefix_cart_extra_info() { global $woocommerce; echo '<div class="cart-extra-info">'; echo '<p class="total-weight">' . __('Total Weight:', 'woocommerce'); echo ($woocommerce->cart->cart_contents_weight*0.3)+$woocommerce->cart->cart_contents_weight; echo '</p>'; echo '</div>'; }