我正在与Woocommerce建立一家商店,您应该有机会在不同的日子订购不同的菜单。
因此,我创建了一个带有日期的数组,使用Javascript从该位置创建一个选项卡式菜单,其中每个选项卡都有一个data-attribute
,其日期为相关日期。
所以我想要实现的是,例如,当我单击选项卡“星期四6.sept”(然后处于活动状态),然后选择一个项(在这种情况下为菜单),然后单击“添加到购物车”-我想将日期添加到该商品并将其发送到购物车。
我该如何实现?甚至有可能吗?
答案 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文件中。经过测试并可以正常工作。