(Woocommerce) Come ottenere l'utente che appartiene a un ordine?
1 risposta
- voti
-
- 2014-03-16
Dalmetodo
__get ()
nella classeWC_Order
puoi vedere che laproprietàuser_id
èpresa/memorizzata come_customer_user
postmetaper l'ordinein questione./** * __getfunzione. * * @accesspublic * @parammisto $ chiave * @returnmisto */ funzionepubblica __get ($ key) { //Ottieni valori o valorepredefinito senonimpostato 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 ($ valore): ''; } altro { $ value=get_post_meta ($this- >id,'_'. $ key,true); } restituire $ valore; } Quindineltuo codicepuoiprendere l'ID utentein questomodo:
$ order=new WC_Order ($ order_id); $ user_id=$ order- > user_id;
Presumo chenon consentiraiil checkout degli ospiti,mapotresti volere un qualchetipo difallbacknel casoin cuinon ci sia un ID utente.
Aggiornamentoper WooCommerce 3.0
Ignoratutto quanto sopra. Come sottolineatonei commenti,esistonometodi direttiper ottenere questeinformazioni. Ineffetti,quasituttii "metodimagici" sono stati rimossie l'accesso diretto alleproprietà degli oggettigenererà avvisi PHP.
$ 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();
-
La classe `WC_Order` di WooCommerce vienefornita con`get_user () `che restituisce l'oggetto utente o`false`pergli ospitie `get_user_id ()` che restituisce l'id utente o zeropergli ospiti ... Non devipiùpreoccuparti di una richiamatase stai usando quelli.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
-
attenzione quando l'ordine appartenente aguest suget_user_id restituirà 0beware when order belonging to guest on get_user_id will return 0
- 1
- 2019-10-24
- Vincent Guesné
Sto creando unafunzione che deveessere chiamata dopo che un ordine è stato completatoin WooCommerce. Per questo sto usando l'hook * 'woocommerce_order_status_completed' *. Voglio verificare se l'ordine ha unprodotto appartenente a una specifica categoria diprodotto. In questo caso,l'utente verrà aggiunto a ungruppo all'interno di Wordpress. Pergestire la logica delgruppo,sto utilizzando l'API di un altroplugin. Questometodo richiede *group_id *e * user_id *. L'unica cosa chemi manca è ottenere * user_id *.
Comeposso ottenere l'utente (in dettaglio: l'id),dalmio ordine WooCommerce?
codice:
Dettaglitecnici:
Versione WordPress: 3.8
Versione WooCommerce: 2.1