而是覆蓋您的模板單product.php的,最好是使用原來的鉤do_action('woocommerce_before_add_to_cart_button');
是女僕通過一些自定義掛鉤函數注入它的代碼。
據我所知,您不需要使用可變產品。你想用那將會顯示您設置一個現有的「顏色」屬性與該產品所選擇的值自定義選擇場的單品。
下面是掛鉤的函數:
// Add the custom field selector based on attribute "Color" values set in the simple product
add_action('woocommerce_before_add_to_cart_button', 'action_before_add_to_cart_button');
function action_before_add_to_cart_button(){
global $product;
foreach($product->get_attributes() as $attribute_slug => $attribute_obj){
if($attribute_slug == 'pa_color'){
echo '<div class="form-group color-dropdown">
<label class="col-sm-3 control-label" for="custom_pa_color">'. __('Color', 'woocommerce') .'</label>
<select id="custom_pa_color" class="col-sm-9 color-select" name="custom_pa_color" required="">';
foreach($attribute_obj->get_terms() as $term_obj){
$term_id = $term_obj->id;
$term_name = $term_obj->name;
$term_slug = $term_obj->slug;
echo '<option value="'.$term_slug.'">'.$term_name.'</option>';
}
echo '</select>
</div>';
}
}
}
然後,只要你想在車項目通過選擇「顏色」屬性「值」,當產品被添加到購物車,最後到購物車顯示它,結賬,爲了這裏的電子郵件通知是你需要的代碼:
// Save the custom product custom field data in Cart item
add_action('woocommerce_add_cart_item_data', 'save_in_cart_my_custom_product_field', 10, 2);
function save_in_cart_my_custom_product_field($cart_item_data, $product_id) {
if(isset($_POST['custom_pa_color'])) {
$cart_item_data[ 'custom_pa_color' ] = $_POST['custom_pa_color'];
// When add to cart action make an unique line item
$cart_item_data['unique_key'] = md5(microtime().rand());
WC()->session->set('custom_data', $_POST['custom_pa_color']);
}
return $cart_item_data;
}
// Render the custom product custom field in cart and checkout
add_filter('woocommerce_get_item_data', 'render_custom_field_meta_on_cart_and_checkout', 10, 2);
function render_custom_field_meta_on_cart_and_checkout($cart_data, $cart_item) {
$custom_items = array();
if(!empty($cart_data))
$custom_items = $cart_data;
if($custom_field_value = $cart_item['custom_pa_color'])
$custom_items[] = array(
'name' => __('Color', 'woocommerce'),
'value' => $custom_field_value,
'display' => $custom_field_value,
);
return $custom_items;
}
// Add the the product custom field as item meta data in the order + email notifications
add_action('woocommerce_add_order_item_meta', 'tshirt_order_meta_handler', 10, 3);
function tshirt_order_meta_handler($item_id, $cart_item, $cart_item_key) {
$custom_field_value = $cart_item['custom_pa_color'];
// We add the custom field value as an attribute for this product
if(! empty($custom_field_value))
wc_update_order_item_meta($item_id, 'pa_color', $custom_field_value);
}
代碼放在您的活動子主題(或主題)的function.php文件或也以任何插件文件。
此代碼的工作,並測試WooCommerce版本從2.5到3.0 +
在模板
你將不得不刪除選擇器代碼,並重新插入oringinal hook:
<form id="add-product-form" class="add-product-form form-horizontal" method="post" action="">
<?php
// Here we re-insert the original hook
do_action('woocommerce_before_add_to_cart_button');
?>
<div class="form-group quantity-area">
<label class="col-sm-3 control-label">Qty.</label>
<input name="quantity" id="quantity" maxlength="2" class="col-sm-9 quantity-input" required="" type="text">
</div>
<button id="submit-to-cart" value="Add to Cart" class="btn btn-a2c submit" name="submit" type="submit"><i class="fa fa-plus" aria-hidden="true"></i> Add to Cart</button>
</form>
相關的回答:Saving a product custom field and displaying it in cart page
「我知道我可以採取變量產品的方法,但即使在256M的內存,變量產品領域的變化菜單不斷旋轉」你檢查你的控制檯?這聽起來像你可能有一個錯誤,阻止了Javascript的完成。在嘗試編寫自己的可變產品替代品之前,我會嘗試調試它。切換到默認主題。禁用插件。啓用'WP_DEBUG_LOG' ...整個調試工作。 – helgatheviking
我發現這個問題,無論如何,仍然有一個問題將屬性帶到購物車。 – mayvn
問題是什麼?您的主題是否覆蓋任何購物車模板?他們過時了嗎?因爲我認爲變體屬性默認顯示在購物車中。 – helgatheviking