(Woocommerce) Wie erhalte ich den Benutzer, der zu einer Bestellung gehört?
1 Antworten
- Stimmen
-
- 2014-03-16
Aus der Methode
__get()
in der KlasseWC_Order
können Sieersehen,dass die Eigenschaftuser_id
aus_customer_user
poste Metafür diebetreffende Bestellung./** * __get function. * * @access public * @param mixed $key * @return mixed */ public function __get( $key ) { // Get values or default if not set if ( 'completed_date' == $key ) { $value = ( $value = get_post_meta( $this->id, '_completed_date', true ) ) ? $value : $this->modified_date; } elseif ( 'user_id' == $key ) { $value = ( $value = get_post_meta( $this->id, '_customer_user', true ) ) ? absint( $value ) : ''; } else { $value = get_post_meta( $this->id, '_' . $key, true ); } return $value; }
In Ihrem Code können Sie also die Benutzer-ID wiefolgt abrufen:
$order = new WC_Order( $order_id ); $user_id = $order->user_id;
Ichgehe davon aus,dass Sie das Auschecken von Gästennicht zulassen,aber Siemöchtenmöglicherweiseeine Art Fallback,falls keine Benutzer-ID vorhandenist.
Updatefür WooCommerce 3.0
Ignorieren Sie alle obengenannten Punkte. Wiein den Kommentarenerwähnt,gibt es direkte Methoden,um diese Informationen zuerhalten. Tatsächlich wurdenfast alle "magischen Methoden"entfernt und der direkte Zugriff auf Objekteigenschaften löst PHP-Warnungen aus.
$order = wc_get_order( $order_id ); $user = $order->get_user(); $user_id = $order->get_user_id();
From the
__get()
method in theWC_Order
class you can see that theuser_id
property is taken from/stored as_customer_user
post meta for the order in question./** * __get function. * * @access public * @param mixed $key * @return mixed */ public function __get( $key ) { // Get values or default if not set if ( 'completed_date' == $key ) { $value = ( $value = get_post_meta( $this->id, '_completed_date', true ) ) ? $value : $this->modified_date; } elseif ( 'user_id' == $key ) { $value = ( $value = get_post_meta( $this->id, '_customer_user', true ) ) ? absint( $value ) : ''; } else { $value = get_post_meta( $this->id, '_' . $key, true ); } return $value; }
So in your code you can grab the user id like so:
$order = new WC_Order( $order_id ); $user_id = $order->user_id;
I presume you're not going to allow guest checkout, but you might want some kind of fallback in case there isn't a user id.
Update for WooCommerce 3.0
Disregard all of the above. As pointed out in the comments there are direct methods for getting this information. In fact, almost all "magic methods" have been removed and directly accessing object properties will throw PHP warnings.
$order = wc_get_order( $order_id ); $user = $order->get_user(); $user_id = $order->get_user_id();
-
Die WooCommerce-Klasse "WC_Order"enthält "get_user ()",das das Benutzerobjekt zurückgibt,oder "false"für Gäste und "get_user_id ()",das die Benutzer-ID oder "Null"für Gäste zurückgibt. Siemüssen sich keine Gedankenmehr übereinen Rückrufmachenwenn Sie diese verwenden.WooCommerce `WC_Order` class comes with `get_user()` which returns the user object or `false` for guests and `get_user_id()` which returns the user id or zero for guests... You no longer need to worry about a callback if you are using those.
- 7
- 2015-01-01
- Nabil Kadimi
-
Vorsicht,wenn die Bestellung des Gastes aufget_user_id 0 zurückgibtbeware when order belonging to guest on get_user_id will return 0
- 1
- 2019-10-24
- Vincent Guesné
Ichmacheeine Funktion,die aufgerufen werdenmuss,nachdemeine Bestellungin WooCommerce abgeschlossen wurde. Dafür verwendeich den Hook * 'woocommerce_order_status_completed' *. Ichmöchte überprüfen,ob die Bestellungein Produktenthält,das zueinerbestimmten Produktkategoriegehört. In diesem Fall wird der Benutzereiner Gruppein Wordpress hinzugefügt. Um die Gruppenlogik zu handhaben,verwendeich die APIeines anderen Plugins. Diese Methodebenötigt die *group_id * und die * user_id *. Daseinzige,wasmirfehlt,ist die * user_id *.
Wie kannich den Benutzer (im Detail: die ID) ausmeiner WooCommerce-Bestellung abrufen?
Code:
Technische Details:
WordPress-Version: 3.8
WooCommerce-Version: 2.1