Например, если базовая цена составляет 10 долларов США, а пользователь вводит значение 2 в пользовательское поле ввода, новая цена станет 20 долларов США.Обновление цены работает нормально, но когда пользователь попадает в корзину и обновляет количество товара в корзине, цена пересчитывается. например Новая рассчитанная цена составила 20 долларов (пример выше), и пользователь меняет количество в корзине с 1 на 5, цена снова пересчитывается с помощью пользовательского целочисленного поля, поэтому 20 долларов снова умножаются на 2 и теперь составляют 40 долларов. .
Но я не понимаю, почему это происходит...
Это мой текущий код:
Код: Выделить всё
add_action( 'woocommerce_after_add_to_cart_quantity', 'add_custom_input_number_field', 0 );
function add_custom_input_number_field() {
echo '';
echo '' . __( 'Custom Input Number', 'woocommerce' ) . '';
echo '';
echo '';
}
add_filter( 'woocommerce_get_price_html', 'update_product_price_based_on_custom_input_on_product_page', 9999, 2 );
function update_product_price_based_on_custom_input_on_product_page( $price, $product ) {
if ( is_product() && isset( $_POST['custom_input_number'] ) ) {
$custom_input_value = (float) $_POST['custom_input_number'];
$product_price = $product->get_price();
$new_price = $product_price * $custom_input_value;
$price = wc_price( $new_price ) . $product->get_price_suffix();
}
return $price;
}
add_filter( 'woocommerce_add_cart_item_data', 'save_custom_input_number_field_data', 10, 2 );
function save_custom_input_number_field_data( $cart_item_data, $product_id ) {
if ( isset( $_POST['custom_input_number'] ) ) {
$cart_item_data['custom_input_number'] = wc_clean( $_POST['custom_input_number'] );
$cart_item_data['custom_input_number'] = (float) $cart_item_data['custom_input_number'];
}
return $cart_item_data;
}
add_action( 'woocommerce_before_calculate_totals', 'update_product_price_based_on_custom_input_in_cart', 10, 1 );
function update_product_price_based_on_custom_input_in_cart( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
if ( isset( $cart_item['custom_input_number'] ) ) {
$custom_input_value = $cart_item['custom_input_number'];
$product = $cart_item['data'];
$product_price = $product->get_price();
$new_price = $product_price * $custom_input_value;
$product->set_price( $new_price );
}
}
}
Я также пробовал разные хуки (add_to_cart, woocommerce_before_calculate_totals и т. д.)
Подробнее здесь: https://stackoverflow.com/questions/784 ... nput-field