В приведенном ниже коде первая функция отобразит скрытое поле ввода внутри формы добавления в корзину.
Внутри существующего кода JavaScript вам нужно будет добавить еще несколько JS-кодов, которые получат выбранное вами значение даты и установят его в этом скрытом поле (так как вы не предоставили никакого связанного кода), Таким образом, когда товар будет добавлен в корзину, будет опубликовано выбранное значение даты.
Затем все остальные функции добавят выбранную дату в качестве данных пользовательской корзины и отобразят ее (опционально) на страницах корзины и оформления заказа. Затем, когда заказ будет размещен, выбранная дата будет сохранена в позициях заказа и будет отображаться везде.
// Add a hidden input field inside the add to cart form
add_action('woocommerce_single_product_summary','custom_single_product_summary', 2 ); // single product pages
function custom_single_product_summary(){
global $product;
if( $product->is_type('variable') ){
add_action('woocommerce_before_single_variation','add_hidden_input_product_field', 30 );
} else {
add_action('woocommerce_before_add_to_cart_button','add_hidden_input_product_field', 30 );
}
}
function add_hidden_input_product_field(){
echo '<div class="hidden-field"><input type="hidden" id="chosen_date" name="chosen_date" value=""></div>';
}
// add the chosen date as custom cart item data
add_filter('woocommerce_add_cart_item_data', 'add_custom_field_data_to_cart', 20, 3);
function add_custom_field_data_to_cart($cart_item_data, $product_id, $variation_id) {
if (isset($_POST['chosen_date']) && !empty($_POST['chosen_date'])) {
$cart_item_data['chosen_date'] = sanitize_text_field( $_POST['chosen_date'] ); // Add the date to cart item data
$cart_item_data['unique_key'] = md5(microtime().rand()); // Make each item unique
}
return $cart_item_data;
}
// Display in cart items the chosen date
add_filter('woocommerce_get_item_data', 'display_custom_item_data', 10, 2);
function display_custom_item_data($cart_item_data, $cart_item) {
if (isset($cart_item['chosen_date'])) {
$cart_item_data[] = array(
'name' => __("Chosen date", "woocommerce"),
'value' => date('Y-m-d', strtotime($cart_item['chosen_date'])), // Formatting date (optional)
);
}
return $cart_item_data;
}
// Save and display chosen date in orders and email notifications (everywhere)
add_action('woocommerce_checkout_create_order_line_item', 'custom_fields_update_order_item_meta', 20, 4);
function custom_fields_update_order_item_meta($item, $cart_item_key, $values, $order) {
if (isset($values['chosen_date'])) {
$date = date('Y-m-d', strtotime($values['chosen_date'])); // Formatting date (optional)
$item->update_meta_data(__('Chosen date', 'woocommerce'), $date); // Save the date
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Протестировано и работает.