이것은 내 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']);
}
}
?>
리팩터링은 잘 작동합니다. 추가 할 몇 가지 트윅이 있습니다. 1. 특정 ID가있는 제품에 대한 유일한 제품으로 제한 할 수 있습니까? 2. 이미지로 내 질문을 업데이트했습니다. "확인 된 값의 유일한 값 이름을 반환하고 싶습니다 (값을 무시하지 않음)."라는 의미임을 나타 냈습니다. 쉼표로 구분 된 경우 체크 아웃시 주문 테이블에 표시해야합니다. "치킨 커틀릿 도시락은, 구운 돼지 갈비 도시락, 실시 예 3, 실시 예 4" 내가 가진 질문을 편집 치킨 까스 도시락과 볶은 돼지 고기 갈비 도시락은 옵션으로 선택하는 경우, 그들은 로 주문 테이블 아래에 나열한다 예를 들어 – omukiguy
내 뜻을 나타내는 이미지. – omukiguy
@omukiguy 첫 번째 요청에 대한 코드를 업데이트했습니다 ... 하나의 제품에 대해서만이를 제한합니다. – LoicTheAztec