2014-02-08 74 views
18

我一直在試圖向購物車中的每件商品添加單個文本輸入字段,並將該用戶輸入提交給產品的元信息。已經2天了,我還沒有成功。WooCommerce:爲購物車中的每件商品添加輸入字段

我的目標是:

  1. 採取從用戶輸入的每個項目添加到購物車。
  2. 在訂單的元信息中顯示該輸入。
  3. 顯示發送給客戶的確認郵件中的輸入內容。

到目前爲止,我已將模板文件複製到我的主題,並在單元格內添加了一個輸入字段。我在鉤子上遇到了問題,從WooCommerce Product Gift Wrap插件中瞭解到我需要的鉤子,如woocommerce issue所示。

我的代碼添加到我的主題目錄複製的模板cart.php:我添加到我的主題的functions.php的

$input_url_data = '<div class="input-url"><input type="text" name="cart-url" value="" title="" class="input-text cart-url text" /></div>'; 

echo apply_filters('woocommerce_add_cart_item_data', $input_url_data, $cart_item_key); 

代碼:

add_filter('woocommerce_add_cart_item_data','add_cart_item_data', 10, 2); 
add_filter('woocommerce_get_cart_item_from_session','get_cart_item_from_session', 10, 2); 
add_filter('woocommerce_get_item_data','get_item_data', 10, 2); 
add_filter('woocommerce_add_cart_item','add_cart_item', 10, 1); 
add_action('woocommerce_add_order_item_meta','add_order_item_meta', 10, 2); 

function add_cart_item_data($cart_item_meta, $product_id) { 
    $input_url_key = ""; 
    $input_url_data['inputurl'] = $input_url_key; 
    return $input_url_data; 
} 

function get_cart_item_from_session($cart_item, $values) { 

if (! empty($values['inputurl'])) { 
    $cart_item['inputurl'] = true; 
} 
return $cart_item; 
} 

function get_item_data($item_data, $cart_item) { 

if (! empty($cart_item['inputurl'])) 
    $item_data[] = array(
    ); 
return $item_data; 
} 

function add_cart_item($cart_item) { 
if (! empty($cart_item['inputurl'])) { 

} 
return $cart_item; 
} 

function add_order_item_meta($item_id, $cart_item) { 
if (! empty($cart_item['inputurl'])) 
woocommerce_add_order_item_meta($item_id, __('URL by buyer', 'custom_input_url'), __('Yes', 'custom_input_url')); 
} 

約鉤woocommerce_add_cart_item_data文檔不非常有幫助,我堅持這一點。我如何繼續?

+0

也許你可以使用一些jQuery來創建一個產品名稱/字段的數組,然後在提交時發送一個Ajax請求到一個處理/驗證頁面,該頁面爲產品名稱進行表格查找,找到產品id,然後從在那裏您可以使用該ID對產品元字段進行插入,然後使用創建的字段進行插入。只是一個想法,因爲我的答案在你的特定情況下不起作用。 – Ian

回答

0

您可以用Woocommerce Product Add-ons plugin

從WooThemes網站做到這一點很容易:

允許客戶通過添加新的選項,自定義您的產品 如輸入框,下拉菜單或複選框。隨着產品附件 的擴展,禮品消息,捐款,激光雕刻和任何其他 產品,可能需要用戶輸入以某種方式現在是您的客戶 選項!

產品附件支持必填字段,textareas,複選框, 收音機,選擇框,自定義價格輸入和文件上傳框。

我以前使用過它在產品購買中添加額外的捐贈字段,並在感謝頁面/收據電子郵件中顯示該字段。

這是大約50美元美元,並會立即啓動並運行以添加文本輸入,並在感謝頁面/電子郵件上顯示字段,如您所願。 50美元絕對值得您節省乾燥時間來自己開發此功能。

下面是從最終用戶的角度流動:

最終用戶在字段數據進入,並增加了產品到購物車 End User enters in field data and adds product to cart

當用戶觀點推車他們進入自定義字段顯示與沿數據該產品 When User views cart the data they entered into the custom field displays along with the product

購買後,最終用戶登錄到感謝頁面並收到收據電子郵件,其中包含產品項目中包含的字段數據。 After purchase, end user lands on thank you page and receives receipt email with field data included with the product item.

在後端:

每個產品創建自定義字段。該選項位於插件菜單選項卡上。

  1. 創建一個新的附加組件組
  2. 輸入組名(爲了方便整理)
  3. 添加一個新的選項,並輸入標籤(這是最終用戶看到什麼,是聯繫在一起的產品)
  4. 更新/發佈產品。

Create custom field for each product

對於已完成的訂單,這是你會在訂單詳細信息管理員看到:

product order details page also displays the field

希望這有助於爲您節省了大量的時間在發展!

+0

嗨,是的,我爲過去的項目購買了該插件,但該客戶特意要求我禁用產品頁面和歸檔頁面。我直接從定價表中添加使用變體和屬性的產品。所以他的要求是編輯輸入框,特別是在購物車本身中,以及購物車中的每個商品。 – Nix

+0

無賴。這是一個奇怪的要求。你是對的,我的回答對你的特殊情況沒有幫助。我還沒有聽說過類似的情況。我會按照這個線程,讓我們知道如果你得到它的工作。 – Ian

+0

謝謝朋友。我一直與來自我國(印度)的幾個關聯機構和woocommerce「專家」聯繫。我研究瞭如何獲得這個擴展(獲得400美元的報價),在這個項目中使用它,然後把它放在Envato市場上。我相信還有其他人有相同的要求,因爲它減少了步驟數(對UX有好處),並且在產品較少時非常有用。 – Nix

6

這很容易。嘗試搜索和閱讀Woocommerce的代碼。

這段代碼讓我指出了我可以添加Url @ Cart的地方。我可以在客戶和管理員的訂單審覈中看到它。

我無法測試電子郵件,因爲我很懶。對不起。

像這樣的東西進去模板\車\ cart.php(有需要一些更多的代碼,因爲它是單獨列)

<td class="product-url"> 
    <?php 
     $html = sprintf('<div class="url"><input type="text" name="cart[%s][url]" value="%s" size="4" title="Url" class="input-text url text" /></div>', $cart_item_key, esc_attr($values['url'])); 
     echo $html; 
    ?> 
</td> 

的functions.php

// get from session your URL variable and add it to item 
add_filter('woocommerce_get_cart_item_from_session', 'cart_item_from_session', 99, 3); 
function cart_item_from_session($data, $values, $key) { 
    $data['url'] = isset($values['url']) ? $values['url'] : ''; 
    return $data; 
} 

// this one does the same as woocommerce_update_cart_action() in plugins\woocommerce\woocommerce-functions.php 
// but with your URL variable 
// this might not be the best way but it works 
add_action('init', 'update_cart_action', 9); 
function update_cart_action() { 
    global $woocommerce; 
    if ((! empty($_POST['update_cart']) || ! empty($_POST['proceed'])) && $woocommerce->verify_nonce('cart')) { 
     $cart_totals = isset($_POST['cart']) ? $_POST['cart'] : ''; 
     if (sizeof($woocommerce->cart->get_cart()) > 0) { 
      foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
       if (isset($cart_totals[ $cart_item_key ]['url'])) { 
        $woocommerce->cart->cart_contents[ $cart_item_key ]['url'] = $cart_totals[ $cart_item_key ]['url']; 
       } 
      } 
     } 
    } 
} 

// this is in Order summary. It show Url variable under product name. Same place where Variations are shown. 
add_filter('woocommerce_get_item_data', 'item_data', 10, 2); 
function item_data($data, $cart_item) { 
    if (isset($cart_item['url'])) { 
     $data['url'] = array('name' => 'Url', 'value' => $cart_item['url']); 
    } 
    return $data; 
} 

// this adds Url as meta in Order for item 
add_action ('woocommerce_add_order_item_meta', 'add_item_meta', 10, 2); 
function add_item_meta($item_id, $values) { 
    woocommerce_add_order_item_meta($item_id, 'Url', $values['url']); 
} 

$ 400是不錯價錢。

+0

嘿,謝謝你的回答。我有一個要求,即從購物車頁面上的顧客處獲得另一個輸入(對於每件商品),我認爲您的答案也適用於此。賞金會過期,所以認爲應該先給你,然後與模板混淆(我已經複製並改變我的主題文件夾中的cart.php)。將嘗試它,我認爲將URL信息添加到電子郵件模板將以與添加到訂單項元的方式相同的方式工作,也會給出一個鏡頭。謝謝。 – Nix

+0

@Nix如果它不工作只是發表一些評論。或者使用更新後的代碼打開新的主題,然後點擊網址。 – ViszinisA

+0

當然可以。儘管我不知道如何在Stackoverflow上發送消息。謝謝:) – Nix

20

確切的目的有一個叫做WC Fields Factory的wordpress插件。

您也可以通過以下woocommerce鉤woocommerce_before_add_to_cart_buttonwoocommerce_add_to_cartwoocommerce_cart_item_name實現這一目標,並'woocommerce_add_order_item_meta'

像添加文本字段到產品頁面

function add_name_on_tshirt_field() { 
    echo '<table class="variations" cellspacing="0"> 
     <tbody> 
      <tr> 
      <td class="label"><label for="color">Name On T-Shirt</label></td> 
      <td class="value"> 
       <input type="text" name="name-on-tshirt" value="" /> 
      </td> 
     </tr>        
     </tbody> 
    </table>'; 
} 
add_action('woocommerce_before_add_to_cart_button', 'add_name_on_tshirt_field'); 

有關車項目表顯示自定義字段使用下面的

function render_meta_on_cart_item($title = null, $cart_item = null, $cart_item_key = null) { 
    if($cart_item_key && is_cart()) { 
     echo $title. '<dl class=""> 
       <dt class="">Name On T-Shirt : </dt> 
       <dd class=""><p>'. WC()->session->get($cart_item_key.'_name_on_tshirt') .'</p></dd>   
       </dl>'; 
    }else { 
     echo $title; 
    } 
} 
add_filter('woocommerce_cart_item_name', 'render_meta_on_cart_item', 1, 3); 

使您的自定義元數據訂購細節,做一些這樣的事

​​

的具體實施,我對如何做到這一點,而無需使用任何插件的文章。http://sarkware.com/how-to-pass-custom-data-to-cart-line-item-in-woocommerce-without-using-plugins/

+0

如果值不爲空,然後如果我要支付額外的費用? –

相關問題