Je crée une fonction qui doit être appelée après la fin d'une commande dans WooCommerce. Pour cela, j'utilise le crochet * 'woocommerce_order_status_completed' *. Je souhaite vérifier si la commande comporte un produit appartenant à une catégorie de produit spécifique. Si tel est le cas, l'utilisateur sera ajouté à un groupe dans Wordpress. Pour gérer la logique de groupe, j'utilise l'API d'un autre plugin. Cette méthode a besoin du * group_id * et du * user_id *. La seule chose qui me manque est d'obtenir le * user_id *.
Comment puis-je obtenir l'utilisateur (en détail: l'identifiant) de ma commande WooCommerce?
code:
function isa_set_isa_member_group_after_order_completed($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach($items as $item) {
$product = $order->get_product_from_item($item);
$has_membership_product = has_term('Lidmaatschap','product_cat',$product->post);
if($has_membership_product) {
break;
}
}
$group = Groups_Group::read_by_name('ISA Leden');
if(!group) {
return; // TODO: Add error message + email?
}
$user_id = 0 // TODO: Get user id from order.
$user_group = array(
"user_id" => $user_id,
"group_id" => $group->group_id
);
$result = Groups_User_Group::create($user_group);
if(!result) {
return; // TODO: Add error message + email?
}
}
Détails techniques:
Version WordPress: 3.8
Version WooCommerce: 2.1
la source
WC_Order
classe WooCommerce est livrée avecget_user()
qui renvoie l'objet utilisateur oufalse
pour les invités etget_user_id()
qui renvoie l'ID utilisateur ou zéro pour les invités ... Vous n'avez plus à vous soucier d'un rappel si vous les utilisez.