0

Comment ajouter une colonne personnalisée à woocommerce panier, puis ajouter des informations de certaines entrées de cette colonne à la commande, la page de paiement et à envoyer un courriel? En fait, j'ai besoin d'ajouter la liste d'amis de buddypress à chaque ligne de produits (le prix doit dépendre du nombre d'amis cochés). Ici, je trouve la suggestion, mais il s `en partie helpfull WooCommerce: Add input field to every item in cart communauté wp aussi garder le silence http://wordpress.org/support/topic/woocommerce-custom-column-in-cart?replies=1Woocommerce panier panier

ce que je fais - son juste ajouter la liste d'amis et aucune idée disponible prochainement comment puis-je enregistrer des données sur la mise à jour panier ou continuer.

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>"; 
        } 

Im chercher à obtenir des informations sur cette question.

Répondre

0

Ici, puisque l'utilisateur peut choisir plusieurs cases à cocher, il peut contenir plusieurs valeurs. Par conséquent, nous avons utilisé la fonction "sérialiser".

par exemple,

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; 
    } 
} 

Pendant que vous ajoutez Ordre des méta-données, vous pouvez chercher des valeurs individuelles et ajouter des clés correspondantes comme suit,

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);  
     } 
     } 
     } 

puisque l'ordre méta seront envoyés dans E - courrier.

0

Merci pour la réponse et - oui, isset variable page de paiement, mais son vide

var_dump($_POST)... 

...[custom_field_name] => 
... 

et le COF est vide dans l'email. Peut-être que je l'ai incorrect?

name="friendsfromcart" 

ou envoyer des valeurs ses un tableau et doivent envoyer:

name="friendsfromcart[]" 

ou

name="[friendsfromcart]" 

ou besoin clé de session

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

Cela devrait fonctionner pour vous. name = "cart ['. $ cart_item_key.'] [friendsfromcart] []" Cela créera un tableau de cases à cocher. – WisdmLabs

0

Il fonctionne, un tableau dans le panier mais Quelque chose ne va pas avec unserialize:

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); 
    } 
} 

}

Questions connexes