Woocommerce — If сумма заказа юзера >N, то сменить роль на S
-
Всем привет, заранее извиняюсь, опыта в php мало. Есть задача сделать несколько типов ролей (Silver, Gold) для клиентов, которые совершают заказы на общую сумму 5000 и 10000 рублей. (за все время)
Логика
— Сначала у пользователя роль Customer и сумма от 0 до 4999 рублей (ничего не делаем)
— При сумме от 5000 до 9999 рублей ему присваивается роль Silver
— Как только сумма перевалит за 10 000 рублей, роль Silver меняется на роль GoldПока остановился на первой роли, но даже она не хочет меняться. Подскажите пожалуйста, что не так? Код вставляю в functions.php
add_action('woocommerce_payment_complete', function($order_id) { $order = new WC_Order($order); $user_id = $order->user_id; if($user_id) { customer_change_role($user_id, 5000, 'silver'); } }); /** * Gets the amount an email has spent * @param string $email Users email * @return float */ function woocommerce_get_amount_spent($email) { $orders = get_posts( array( 'meta_key' => '_billing_email', 'meta_value' => $email, 'post_type' => 'shop_order', 'posts_per_page' =>-1 ) ); $spent = 0; foreach($orders as $shop_order) { $order = new WC_Order($shop_order->ID); $spent += $order->get_total(); } return $spent; } /** * Change a customers role when they spend big money * @param integer $user_id The ID of the user. Current user when none supplied * @param integer $threshold How much money do we need? * @param string $role Which role to give * @return void */ function customer_change_role($user_id = null, $threshold = 5000, $role = 'silver') { // when the user_id was not supplied we'll try and figure it out if($user_id === null) { $user_id = get_current_user_id(); } // this probably means the user is not logged in if( !$user_id ) { return; } // get the user object $user = get_user_by('id', $user_id); // nope, something went wrong if(!$user) { return; } // the user is a big spender, lets give him a role if(woocommerce_get_amount_spent($user->data->user_email) >= $threshold) { $user->add_role($role); } // this mofo ain't using money. take it back! else { $user->remove_role($role); } }
Тема «Woocommerce — If сумма заказа юзера >N, то сменить роль на S» закрыта для новых ответов.