2017-05-03 47 views
1

我的環境是:
- WordPress的4.7.4
- Debian的Linux的8
- WooCommerce 3.0.5
- 256M內存
添加自定義屬性選擇的值購物車,結賬,訂單和電子郵件通知

我已經嘗試了多種解決方案,包括:

不過,我仍然沒有得到正確的結果和時間是最重要的,在這一點上這個項目的。精密的,我也有同樣的價格爲所有屬性值...

我創建了一個自定義的單product.php tempalte與自定義表單:

<form id="add-product-form" class="add-product-form form-horizontal" method="post" action=""> 
    <input name="add-to-cart" value="15709" type="hidden"> 
    <div class="form-group color-dropdown"> 
     <label class="col-sm-3 control-label">Color</label> 
     <select id="color-options" class="col-sm-9 color-select" name="color" required=""> 
     <option value="auburn">Auburn</option> 
     <option value="black">Black</option> 
     <option value="mahogany-ash">Mahogany Ash</option> 
     <option value="mocha">Mocha</option>       </select> 
    </div> 
    <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> 

這種形式使用了AJAX POST方法,並添加到購物車如預期。

但是:

  1. 我沒有看到的顏色,他們選擇列出的WC車頁面
  2. 我沒有看到他們選擇了WC結帳頁面
  3. 我上列出的顏色上沒有看到他們在相應電子郵件中選擇的顏色。我知道我必須編輯email-order-items.php,但在這裏我不知道正確的方法。

我的問題:

所以,我怎麼能自定義屬性選擇的值添加到購物車,結賬,訂單和電子郵件通知?

我知道我可以把不同產品的做法,但即使在256M內存,在不同產品領域的變化不斷菜單旋轉,所以我可以永遠到不了這個區域添加的變化。

+0

「我知道我可以採取變量產品的方法,但即使在256M的內存,變量產品領域的變化菜單不斷旋轉」你檢查你的控制檯?這聽起來像你可能有一個錯誤,阻止了Javascript的完成。在嘗試編寫自己的可變產品替代品之前,我會嘗試調試它。切換到默認主題。禁用插件。啓用'WP_DEBUG_LOG' ...整個調試工作。 – helgatheviking

+0

我發現這個問題,無論如何,仍然有一個問題將屬性帶到購物車。 – mayvn

+0

問題是什麼?您的主題是否覆蓋任何購物車模板?他們過時了嗎?因爲我認爲變體屬性默認顯示在購物車中。 – helgatheviking

回答

2

而是覆蓋您的模板單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

+0

多麼好的信息答案。謝謝Loic! – mayvn

+0

關於答案的榮譽。它對我來說仍然看起來像一個可變產品,只有一個單一的顏色屬性,但在這裏已經很晚了,我不能再想直了。 – helgatheviking

相關問題