Добавить произвольно выбранную дату в элемент корзины при действии «Добавить в корзину» в Woocommerce - PullRequest
0 голосов
/ 06 сентября 2018

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

Итак, я создал массив с датами, откуда я с помощью Javascript создаю меню с вкладками, где на каждой вкладке есть data-attribute с датой соответствующего дня.

Итак, чего я хочу добиться, так это когда я, например, нажимаю вкладку «четверг 6.sept» (затем ее активная), а затем выбираю пункт (в данном случае меню) и нажимаю «добавить в корзину» - Я хочу добавить дату к этому пункту и отправить ее в корзину.

Как мне этого достичь или это вообще возможно?

1 Ответ

0 голосов
/ 07 сентября 2018

В приведенном ниже коде первая функция отобразит скрытое поле ввода внутри формы добавления в корзину.

Внутри существующего кода 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 вашей активной дочерней темы (или активной темы). Протестировано и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...