2014-07-23 157 views
0

如何將自定義列添加到woocommerce購物車,然後添加此列的某些輸入信息以訂購,結帳頁面和電子郵件? 其實我需要從buddypress添加到每個產品行的朋友列表(價格必須取決於有多少朋友檢查)。 在這裏,我找到的建議,但它了部分有益WooCommerce: Add input field to every item in cart WP界也保持沉默 http://wordpress.org/support/topic/woocommerce-custom-column-in-cart?replies=1Woocommerce購物車列

我做什麼 - 它的avalaible朋友只需添加名單,不知道我怎麼可以節省更新車數據或繼續進行。

if (bp_has_members('user_id=' . bp_loggedin_user_id())){ 
         function ggUserFrom(){ 
          $arrUsers = array(); 
          while (bp_members()){ 
           bp_the_member(); 
           $arrUsers[ bp_get_member_user_nicename() ] = bp_get_member_user_nicename(); 
          } 
          return $arrUsers; 
         } 

         echo "<div class='friends-holder'>"; 
         foreach (ggUserFrom() as $friend){ 
          echo '<p><input type="checkbox" name="cart['.$cart_item_key.'][friendsfromcart]" value="'.$friend.'"> 
          <span>'.$friend.'</span></p>'; 
         } 
         echo "</div>"; 
        } 

我想了解關於這個問題的任何信息。

回答

0

這裏,由於用戶可能選擇多個複選框,因此可能包含多個值。因此,我們使用了「序列化」功能。

例如,

add_filter('woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3); 

if(!function_exists('wdm_get_cart_items_from_session')) 
{ 
    function wdm_get_cart_items_from_session($item,$values,$key) 
    { 

    $item['custom_field_name'] = isset($values['friendsfromcart'])? serialize($values['friendsfromcart']) : ''; 

     return $item; 
    } 
} 

當您添加順序元數據,您可以獲取單個值,並添加相應的項,如下所示,

add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2); 

    function wdm_add_values_to_order_item_meta($item_id, $values) 
    { 

     $user_custom_values = unserialize($values['friendsfromcart']); 

     if(count($user_custom_values) > 0) 
     { 
     foreach($user_custom_values as $single_value) 
     { 
      wc_add_order_item_meta($item_id,ucfirst($single_value),single_value);  
     } 
     } 
     } 

因爲爲了元將在電子商務發送 - 郵件。

0

感謝答覆,並 - 在結帳頁面是,可變isset,但他在

var_dump($_POST)... 

...[custom_field_name] => 
... 

空,OFC是電子郵件空。 也許我不正確發送它?

name="friendsfromcart" 

或發送值的一個數組,必須發送:

name="friendsfromcart[]" 

name="[friendsfromcart]" 

或需要在車會話密鑰

name="cart['.$cart_item_key.'][friendsfromcart]" ? 
+0

這應該爲你工作。 name =「cart ['。$ cart_item_key。'] [friendsfromcart] []」這將創建複選框數組。 – WisdmLabs

0

它的工作原理,數組,但反序列化錯誤:

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 ]['friendsfromcart'])) { 
       $woocommerce->cart->cart_contents[ $cart_item_key ]['friendsfromcart'] = $cart_totals[ $cart_item_key ]['friendsfromcart']; 
      } 
     } 
    } 
} 

}

add_filter('woocommerce_get_cart_item_from_session', 'wdm_get_cart_items_from_session', 1, 3); 
function wdm_get_cart_items_from_session($item,$values,$key){ 
$item['friendsfromcart'] = isset($values['friendsfromcart'])? serialize($values['friendsfromcart']) : ''; 
return $item; 

}

add_action('woocommerce_add_order_item_meta','wdm_add_values_to_order_item_meta',1,2); 
function wdm_add_values_to_order_item_meta($item_id, $values){ 
$user_custom_values = unserialize($values['friendsfromcart']); 
if(count($user_custom_values) > 0){ 
    foreach($user_custom_values as $single_value){ 
     wc_add_order_item_meta($item_id,ucfirst($single_value),single_value); 
    } 
} 

}