Изменение веса товаров в корзине для обновления стоимости доставки в Woocommerce

Я создаю особый тип интернет-магазина, используя плагин Woocommerce и Extra Product Options, и столкнулся с проблемой веса товаров.

Я хочу изменить вес каждого продукта внутри корзины, в зависимости от выбранного атрибута, без удачи. Я использую это, чтобы изменить вес без какого-либо успеха.

add_action( 'woocommerce_before_calculate_totals', 'add_custom_weight', 10, 1);
function add_custom_weight( WC_Cart $cart ) {
if ( sizeof( $cart->cart_contents ) > 0 ) {
foreach ( $cart->cart_contents as $cart_item_key => $values ) {
$_product = $values['data'];

//very simplified example - every item in cart will be 100 kg
$values['data']->weight = '100';
}
}
var_dump($cart->cart_contents_weight);
}

var_dump возвращает вес корзины без изменений (если он был 0,5 до моего изменения, он останется 0,5) и, конечно, стоимость доставки (в зависимости от веса) останется неизменной. Есть идеи?

1

Решение

Поскольку WooCommerce 3+, вам нужно будет использовать WC_Product методы на WC_Product объекты. Вот функциональный способ сделать это:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_weight', 10, 1);
function add_custom_weight( $cart_object ) {

if ( (is_admin() && ! defined( 'DOING_AJAX' ) ) || $cart_object->is_empty() )
return;

if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;

foreach ( $cart_object->get_cart() as $cart_item ) {
//very simplified example - every item in cart will be 100 kg
$cart_item['data']->set_weight( 100 );
}
// Testing: cart weight output
echo '<pre>Cart weight: '; print_r( $cart_object->get_cart_contents_weight() ); echo '</pre><br>';
}

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

Этот код протестирован и работает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]