WooCommerce Как сохранить Предложенную цену товару?
Есть задача для товаров сделать возможность предлагать пользователю свою цену.
Подскажите, как забирать и где правильнее всего будет хранить это значение для текущего пользователя?
Вот в файле теми /woocommerce/single-product/add-to-cart/simple.php
Если пользователь ввел значение в input, то оно должно сохраниться для дальнейшей передачи в Заказ(Order).
Подскажите, пожалуйста, как его в post_meta положить? Как связывает Submit с получением значения с этого поля?
Пробовал так
<!-- Custom propose price -->
<label class="propose_price">
<span class="propose_price__desc"><?php _e("You can propose a price") ?></span>
<input class="propose_price__val" value="<?php echo get_post_meta($post->ID, 'propose_price', true) ?>" name="propose_price" type="number">
</label>
<?php add_action( 'woocommerce_process_product_meta', function ($product){
$woocommerce_number_field = $_POST['propose_price'];
if ( ! empty( $woocommerce_number_field ) ) {
update_post_meta( $product->get_id(), 'propose_price', esc_attr( $woocommerce_number_field ) );
}
}, 10 ); ?>
но до корзины ничего не доходит. Так же Пробовал привязаться к хуку корзины, но тоже что-то значение не заносит...
add_action( 'woocommerce_single_product_summary', 'woo_propose_price', 20);
function woo_propose_price($product_id){
add_filter('woocommerce_add_cart_item_data', function ($cart_item_data, $product_id) {
$cart_item_data['propose_price'] = get_post_meta($product_id, 'propose_price', true);
return $cart_item_data;
}, 10, 2);
echo '<label class="propose_price">
<span class="propose_price__desc">'. _e("You can propose a price") .'</span>
<input class="propose_price__val" value="'. get_post_meta($product_id, 'propose_price', true) .'" name="propose_price" type="number">
</label>';
}
Ответы (1 шт):
Предоставленный вами код не является полным и, похоже, содержит некоторые ошибки. Чтобы добавить введенную пользователем пользовательскую цену в корзину и сохранить ее в заказе, вы можете сделать следующее:
Добавьте настраиваемое поле ввода, чтобы пользователь мог ввести предложенную цену в файл шаблона:
<label class="propose_price"> <span class="propose_price__desc"><?php _e("You can propose a price") ?></span> <input class="propose_price__val" value="" name="propose_price" type="number"> </label>В файле functions.php используйте фильтр woocommerce_add_cart_item_data, чтобы добавить введенную пользователем пользовательскую цену к данным товара в корзине:
add_filter('woocommerce_add_cart_item_data', function ($cart_item_data, $product_id) { if (isset($_POST['propose_price'])) { $cart_item_data['propose_price'] = sanitize_text_field($_POST['propose_price']); } return $cart_item_data;Используйте фильтр woocommerce_get_item_data, чтобы отобразить пользовательскую цену в корзине и при оформлении заказа:
add_filter('woocommerce_get_item_data', function ($item_data, $cart_item) { if (isset($cart_item['propose_price'])) { $item_data[] = array( 'name' => __('Proposed Price', 'woocommerce'), 'value' => wc_price($cart_item['propose_price']), ); } return $item_data; }, 10, 2); }, 10, 2);Используйте действие woocommerce_add_order_item_meta, чтобы добавить пользовательскую цену в метаданные заказа:
add_action('woocommerce_add_order_item_meta', function ($item_id, $cart_item) { if (isset($cart_item['propose_price'])) { wc_add_order_item_meta($item_id, 'Proposed Price', wc_price($cart_item['propose_price'])); } }, 10, 2);
Это позволит пользователю ввести свою собственную цену, добавить ее в корзину, отобразить в корзине и при оформлении заказа и сохранить в заказе для дальнейшего использования.