2016-04-19 4 views
2

Caveat: Ich bin ein Solo-freier Designer kein Entwickler ;-)Speichern WooCommerce Bestellen Produkte auf Benutzer Meta Benutzerdefinierte Feld

ich ein benutzerdefiniertes Feld in dem Wordpress Benutzer meta membership genannt erstellt haben.

Ich habe den folgenden Code ausprobiert, um den WooCommerce-Produktnamen im Feld membership an der Kasse with help from this answer zu speichern.

Aktualisiert Versuch:

function wascc_woocommerce_checkout_update_user_meta_membership ($customer_id, $posted) { 

    if (isset($posted['$orderid'])) { 
     $order = $posted['$orderid']; 
    } 
    $theorder = new WC_Order($order); 
    $items = $theorder->get_items(); 

    foreach ($items as $item) { 
     $product_name = $item['name']; 
    } 

    if (!(empty($product_name))) { 
     update_user_meta($customer_id, 'membership', $product_name); 
    } 

} 

add_action('woocommerce_checkout_update_user_meta', 'wascc_woocommerce_checkout_update_user_meta_membership', 10, 2); 

Es erzeugt keinen Fehler, aber nicht speichert den Produktnamen membership.

Hilfe geschätzt.

Last question may be related.

+0

Bitte lesen Sie erneut @Reigels Antwort, die Sie akzeptiert haben. Der zweite Parameter ist '$ posted', der die' $ _POST [] 'Werte und nicht' $ order_id' enthält, die Sie im obigen Code verwenden. Da der Code keine gültige Reihenfolge finden kann, speichert er die Meta nicht. –

+2

Verwenden Sie 'woocommerce_checkout_update_order_meta' von Ihrer letzten Frage ... es hat die Auftrags-ID ... und Sie können die Kunden-ID von der Auftrags-ID bekommen ... Ich kann jetzt nicht den vollen Code geben, weil ich auf Handy bin ... – Reigel

+0

Ich kann nicht sehen, wo sich die order_id in 'woocommerce_checkout_update_order_meta' befindet. – Steve

Antwort

2

wie ich auskommentiert habe, sollten Sie woocommerce_checkout_update_order_meta verwenden.

Etwas wie folgt aus: obwohl

function wascc_woocommerce_checkout_update_user_meta_membership ($order_id) { 

    $theorder = new WC_Order($order_id); 
    $items = $theorder->get_items(); 

    foreach ($items as $item) { 
     $product_name = $item['name']; 
    } 

    if (!(empty($product_name))) { 

     // Gets the customer/user ID associated with the order. Guests are 0. 
     $customer_id = $theorder->get_user_id(); 

     update_user_meta($customer_id, 'membership', $product_name); 

    } 

} 

add_action('woocommerce_checkout_update_order_meta', 'wascc_woocommerce_checkout_update_user_meta_membership'); 

Ich habe Zweifel mit Ihrem foreach-Schleife ... Sie Looping nur das letzte Element zu bekommen?

+0

Ja! Danke Dir, Reigel. Ich dachte dasselbe über meine foreach-Schleife, aber untersuchte nicht, wie ich den letzten Gegenstand bekommen konnte. Ich werde es so machen. – Steve