私は助けてください... コードは単一の製品ページで、サイズの入力を表示します(これはバックエンドではリピータフィールドの複数選択)色のチェックボックス(バックエンドではリピータフィールドでの選択)にアタッチされていれば、acfリピータフィールドによって呼び出されます。各色は複数のサイズに関連付けることができます。最初の関数はうまくいき、私が望むものが表示されます。しかし、カスタムメタ製品としてカート内に表示するための結果を取得することはできません(製品のバリエーションとして)。私が間違っている場所を教えてください。おかげでたくさん、私は迷ってしまいました... :-(ここ は、試験製品です:http://neo2.agencepoint.com/boutique/t-shirt-col-rond-manches-courtes-femme/ACFリピータフィールド付きカートにカスタム製品メタを表示
add_action('woocommerce_before_add_to_cart_button', 'add_custom_fields');
function add_custom_fields() {
global $product;
$product_id = $product->id;
if(get_field('tailles_et_couleurs', $product_id)):
while(has_sub_field('tailles_et_couleurs', $product_id)):
$select_couleur = get_sub_field_object('couleurs', $product_id);
$valeur_couleur = get_sub_field('couleurs', $product_id);
$select_taille = get_sub_field_object('tailles', $product_id);
$valeur_taille = get_sub_field('tailles', $product_id);
foreach($select_couleur['choices'] as $key_couleur => $nom_couleur):
if($key_couleur == $valeur_couleur):
echo '<div class="conteneur_taille_couleur"><label class="label-couleur label-couleurs-meta-'.$key_couleur.'" for="couleurs-meta-'.$key_couleur.'"> <input id="couleurs-meta-'.$key_couleur.'" name="'.$key_couleur.'" data-type="palettes" type="checkbox" value="'.$nom_couleur.'"><div class="palette-box" id="palette_couleur_'.$key_couleur.'"></div><div class="nom-couleur nom-couleur-couleurs-meta-'.$key_couleur.'">'.$nom_couleur.'</div></label>';
endif;
endforeach;
foreach($select_taille['choices'] as $key_taille => $nom_taille):
if (in_array($key_taille, $valeur_taille)):
echo '<div class="conteneur_taille"><label for="'.$key_taille.'">'.$nom_taille.'</label><input class="quantite_prdt" type="text" name="'.$key_taille.'" id="'.$key_taille.'" data-type="text" ></div>';
endif;
endforeach;
echo '</div>';
endwhile;
endif;
}
add_action('woocommerce_add_cart_item_data', 'save_my_custom_product_field', 10, 2);
function save_my_custom_product_field($cart_item_data, $product_id) {
while(has_sub_field('tailles_et_couleurs', $product_id)):
$select_couleur = get_sub_field_object('couleurs', $product_id);
$valeur_couleur = get_sub_field('couleurs', $product_id);
$select_taille = get_sub_field_object('tailles', $product_id);
$valeur_taille = get_sub_field('tailles', $product_id);
foreach($select_couleur['choices'] as $key_couleur => $nom_couleur):
if($key_couleur == $valeur_couleur):
$cart_item_data[$key_couleur] = $valeur_couleur;
$cart_item_data['unique_key'] = md5(microtime().rand());
endif;
endforeach;
foreach($select_taille['choices'] as $key_taille => $nom_taille):
if (in_array($key_taille, $valeur_taille)):
$cart_item_data[$key_taille] = $valeur_taille;
$cart_item_data['unique_key'] = md5(microtime().rand());
endif;
endforeach;
endwhile;
return $cart_item_data;
}
add_filter('woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2);
function render_meta_on_cart_and_checkout($cart_data, $cart_item) {
if($cart_item['variation_id'] == 0){
$item_id = $cart_item['product_id'];
}
else
{
$item_id = $cart_item['variation_id'];
}
$custom_items = array();
if(!empty($cart_data)):
$custom_items = $cart_data;
endif;
while(has_sub_field('tailles_et_couleurs', $product_id)):
$select_couleur = get_sub_field_object('couleurs', $product_id);
$valeur_couleur = get_sub_field('couleurs', $product_id);
$select_taille = get_sub_field_object('tailles', $product_id);
$valeur_taille = get_sub_field('tailles', $product_id);
foreach($select_couleur['choices'] as $key_couleur => $nom_couleur):
if($key_couleur == $valeur_couleur):
if(isset($cart_item[$nom_couleur])):
$custom_items[] = array("name" => $nom_couleur, "value" => $cart_item[$valeur_couleur]);
endif;
endif;
endforeach;
foreach($select_taille['choices'] as $key_taille => $nom_taille):
if (in_array($key_taille, $valeur_taille)):
if(isset($cart_item[$nom_taille])):
$custom_items[] = array("name" => $nom_taille, "value" => $cart_item[$valeur_taille]);
endif;
endif;
endforeach;
endwhile;
return $custom_items;
}