• Всем привет, заранее извиняюсь, опыта в 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);
      }
    
    }
Просмотр 1 ответа (всего 1)
Просмотр 1 ответа (всего 1)

Тема «Woocommerce — If сумма заказа юзера >N, то сменить роль на S» закрыта для новых ответов.