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