Я создаю продукты, которые сильно различаются по размеру и весу.Я не использую варианты продуктов WooCommerce, чтобы помочь мне с этим, поскольку мои продукты сильно настроены.Я использую сторонний плагин для выбора из множества вариантов и планирую проверить эти параметры для определения веса товара.
Проблема заключается в том, что я хочу установить вес товара до его добавления вкорзина.Калькулятор доставки в корзине будет рассчитывать вашу доставку на основе общего веса вашей корзины (WooCommerce Weight Based Shipping).
Я пробовал 2 крючка WooCommerce довольно широко, чтобы сделать это без удачи.
add_filter( 'woocommerce_add_cart_item_data', 'update_weight_on_add_to_cart', 10, 3);
и
add_action( 'woocommerce_add_to_cart', 'update_weight_on_add_to_cart', 10, 6 );
Я могу установить пользовательские поля с помощью add_filter.Делая это, я вижу, что успешно установил вес продукта на что-то новое.НО, как только я попаду на страницу корзины, вес вернется к тому, что установлено на странице редактирования продукта.
Это функция, которую я сейчас использую, чтобы проверить, что:
function update_weight_on_add_to_cart( $cart_item_data, $product_id, $variation_id )
{
$product = wc_get_product( $product_id );
$weight1 = $product->get_weight();
$product->set_weight(3.45);
$weight2 = $product->get_weight();
$cart_item_data['weight1'] = $weight1;
$cart_item_data['weight2'] = $weight2;
return $cart_item_data;
}
Затем я отображаю эти поля в корзине, чтобы увидеть, успешно ли я изменил данные, используя следующую функцию и функцию.(Я получил большую часть этого из сообщений в блоге или других сообщений StackOverflow)
add_filter( 'woocommerce_get_item_data', 'display_weight', 10, 2 );
function display_weight( $item_data, $cart_item ) {
$item_id = $cart_item['variation_id'];
if($item_id == 0) $item_id = $cart_item['product_id'];
$product_qty = $cart_item['quantity'];
$product = wc_get_product($item_id);
$weight3 = $product->get_weight();
$item_data[] = array(
'key' => __('Weight3', 'woocommerce'),
'value' => wc_clean( $weight3 ),
'display' => ''
);
$item_data[] = array(
'key' => __( 'Weight1', 'woocommerce' ),
'value' => wc_clean( $cart_item['weight1'] ),
'display' => ''
);
$item_data[] = array(
'key' => __( 'Weight2', 'woocommerce' ),
'value' => wc_clean( $cart_item['weight2'] ),
'display' => ''
);
return $item_data;
}
Мои последние попытки с использованием приведенного выше кода привели к следующему на странице корзины.
Weight3: 1
Вес1: 1
Вес2: 3.45
Любая помощь будет принята с благодарностью!Если это невозможно сделать таким образом, есть ли лучший способ подойти к этому вопросу?Может быть, это нужно сделать в корзине?