在Woocommerce中的“添加到购物车”操作中,向购物车项目添加自定义选择的日期

时间:2018-09-06 19:41:56

标签: php wordpress woocommerce product cart

我正在与Woocommerce建立一家商店,您应该有机会在不同的日子订购不同的菜单。

因此,我创建了一个带有日期的数组,使用Javascript从该位置创建一个选项卡式菜单,其中每个选项卡都有一个data-attribute,其日期为相关日期。

所以我想要实现的是,例如,当我单击选项卡“星期四6.sept”(然后处于活动状态),然后选择一个项(在这种情况下为菜单),然后单击“添加到购物车”-我想将日期添加到该商品并将其发送到购物车。

我该如何实现?甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

在下面的代码中,第一个函数将在“添加到购物车”表单内显示一个隐藏的输入字段。

  

在现有的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文件中。经过测试并可以正常工作。