(Woocommerce) Comment faire appartenir l'utilisateur à une commande?
1 réponses
- votes
-
- 2014-03-16
Àpartir de laméthode
__get()
de la classeWC_Order
,vouspouvez voir que lapropriétéuser_id
estextraite de/stockéeen tant que_customer_user
publier unemétapour la commandeen 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; }
Donc,dans votre code,vouspouvez saisir l'identifiant de l'utilisateur comme ceci:
$order = new WC_Order( $order_id ); $user_id = $order->user_id;
Je suppose que vousn'autorisezpas lepaiement desinvités,mais vous voudrezpeut-être une sorte de solution de secours au cas oùiln'y auraitpas d'identifiant d'utilisateur.
Mise àjourpour WooCommerce 3.0
Netenezpas compte detout ce quiprécède. Commeindiqué dans les commentaires,ilexiste desméthodes directespour obtenir cesinformations. Enfait,presquetoutes les "méthodesmagiques" ont été suppriméeset l'accès direct auxpropriétés des objets lancera des avertissements 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 WooCommerce `WC_Order`estfournie avec`get_user () `qui retourne l'objet utilisateur ou`false`pour lesinvitéset `get_user_id ()` qui retourne l'ID utilisateur ou zéropour lesinvités ... Vousn'avezplus à vous soucier d'un rappelsi vous les utilisez.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
-
méfiez-vous lorsque la commande appartenant à l'invité surget_user_id renverra 0beware when order belonging to guest on get_user_id will return 0
- 1
- 2019-10-24
- Vincent Guesné
Je crée unefonction qui doit être appelée unefois la commandeterminée dans WooCommerce. Pour cela,j'utilise le hook * 'woocommerce_order_status_completed' *. Je souhaite vérifier si la commande contient unproduit appartenant à une catégorie deproduits spécifique. Sitelest le cas,l'utilisateur sera ajouté à ungroupe dans Wordpress. Pourgérer la logique degroupe,j'utilise l'API d'un autreplugin. Cetteméthodenécessite le *group_id *et le * user_id *. La seule chose quime manqueest d'obtenir le * user_id *.
Commentpuis-je obtenir l'utilisateur (en détail: l'identifiant) dema commande WooCommerce?
code:
Détailstechniques:
Version de WordPress: 3.8
Version de WooCommerce: 2.1