これは、WooCommerceオーダーのアイテムアイテムメタを追加するためのカート追加アイテムの追加方法についてのプラグインです。&最初は以下のコードは入力タイプ=テキストでうまくいきました。 valueのラベルと入力された値を返します。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を持つ製品に限定して1つの製品のみに限定できますか? 2.画像を使って私の質問を更新しました。「チェックされた値の唯一の値の名前を返したい(値を無視して無視します)」という意味です。私はちょうどカンマ区切りであるときにチェックアウト時に注文テーブルにこれらを表示する必要があります。チキンカツ弁当やローストポークリブ弁当はオプションとしてチェックされている場合 – omukiguy
は例えば、彼らは 「チキンカツ弁当、ローストポークリブ弁当、例3、例4」 として順位表の下に表示されなければならない私はとの質問を編集しました私が何を意味するかを示すイメージ。 – omukiguy
@omukiguy最初のリクエストのコードを更新しました...これを1つの製品のみに限定します。 – LoicTheAztec