1
這是一個關於如何添加購物車物品meta的插件&我的WooCommerce訂單的訂單物品元。最初我的代碼對於輸入類型=文本很好。它返回值和輸入值的標籤。在WooCommerce中添加自定義字段作爲購物車物品元和訂購物品元
轉換爲type=checkbox
時,代碼將返回label
和value="on"
。
我想只返回選中值的值名稱(忽略未選中的值)。
幫助包含更多複選框選項的重構將有助於減少書面代碼。
我的代碼:
<?php
global $woocommerce, $product, $post;
add_action('woocommerce_before_add_to_cart_button', 'add_fields_before_add_to_cart');
function add_fields_before_add_to_cart() {
?>
<div class="simple-selects">
<div class="col-md-6">
<h3>Main meals</h3>
<p><input type="checkbox" name="mm_chicken_cutlet_bento" id="mm_chicken_cutlet_bento"><?php _e("Chicken Cutlet Bento", "aoim"); ?></p>
<p><input type="checkbox" name="mm_roasted_pork_rib_bento" id="mm_roasted_pork_rib_bento"><?php _e("Roasted Pork Rib Bento", "aoim"); ?></p>
</div>
</div>
<?php
}
/**
* Add data to cart item
*/
add_filter('woocommerce_add_cart_item_data', 'add_cart_item_data', 25, 2);
function add_cart_item_data($cart_item_meta, $product_id) {
if (isset($_POST ['mm_chicken_cutlet_bento']) && isset($_POST ['mm_roasted_pork_rib_bento'])) {
$custom_data = array() ;
$custom_data [ 'mm_chicken_cutlet_bento' ] = isset($_POST ['mm_chicken_cutlet_bento']) ? sanitize_text_field ($_POST ['mm_chicken_cutlet_bento']) : "" ;
$custom_data [ 'mm_roasted_pork_rib_bento' ] = isset($_POST ['mm_roasted_pork_rib_bento']) ? sanitize_text_field ($_POST ['mm_roasted_pork_rib_bento']): "" ;
$cart_item_meta ['custom_data'] = $custom_data ;
}
return $cart_item_meta;
}
/**
* Display custom data on cart and checkout page.
*/
add_filter('woocommerce_get_item_data', 'get_item_data' , 25, 2);
function get_item_data ($other_data, $cart_item) {
if (isset($cart_item [ 'custom_data' ])) {
$custom_data = $cart_item [ 'custom_data' ];
$other_data[] = array('name' => 'Chicken Cutlet Bento', 'display' => $custom_data['mm_chicken_cutlet_bento']);
$other_data[] = array('name' => 'Roasted Pork Rib Bento', 'display' => $custom_data['mm_roasted_pork_rib_bento']);
}
return $other_data;
}
/**
* Add order item meta.
*/
add_action('woocommerce_add_order_item_meta', 'add_order_item_meta' , 10, 2);
function add_order_item_meta ($item_id, $values) {
if (isset($values [ 'custom_data' ])) {
$custom_data = $values [ 'custom_data' ];
wc_add_order_item_meta($item_id, 'Chicken Cutlet Bento', $custom_data['mm_chicken_cutlet_bento']);
wc_add_order_item_meta($item_id, 'Roasted Pork Rib Bento', $custom_data['mm_roasted_pork_rib_bento']);
}
}
?>
的重構效果很好。有幾個tweeks添加。 1.這可以限制爲一個(唯一的)產品對具有特定ID的產品嗎? 2.我用圖像更新了我的問題,以表明我的意思是「我想返回檢查值的唯一值名稱(忽略未選中的值)」。我需要在結賬時在訂單表中顯示這些內容,只是逗號分隔。 – omukiguy
例如,如果雞肉餅盒和烤豬排盒飯作爲選項被檢查,它們應該被列在訂單表下作爲 「雞肉餅盒飯,烤豬排盒套,示例3,示例4」 我編輯了問題一張圖片來展示我的意思。 – omukiguy
@omukiguy我已更新您的第一個請求的代碼...僅限於一種產品。 – LoicTheAztec