За последние 24 часа нас посетили 16456 программистов и 1595 роботов. Сейчас ищут 1287 программистов ...

Функция обновления таблицы Woocommerce

Тема в разделе "Wordpress", создана пользователем Alex_shu, 6 янв 2023.

Метки:
  1. Alex_shu

    Alex_shu Новичок

    С нами с:
    6 янв 2023
    Сообщения:
    1
    Симпатии:
    0
    Помогите, пожалуйста, с решением проблемы.

    На сайте стоит woocommerce.
    Есть кастомный плагин, который делает «анализ записи голоса».
    Есть товар, который продаётся по штучно в качестве доступа к функционалу этого плагина.

    Т.е. покупатель приобретает товар, затем у него в личном кабинете появляется то количество доступных «анализов голоса», которое он приобрёл.

    Количество купленных или оставшихся «анализов голоса» хранится в таблице wc_customer_lookup

    Проблема: если покупатель приобретает товар впервые, то количество увеличивается, если же он делает это повторно, то количество не прибавляется к оставшимся, а просто обновляется на приобретённое количество.

    Функция обновления количества:

    PHP:
    1. function add_activations($order_id, $order_status_transition_from, $order_status_transition_to)
    2.   {
    3.  
    4.     global $wpdb, $table_prefix;
    5.  
    6.     if (
    7.       !in_array($order_status_transition_to, ['processing', 'completed']) ||
    8.       ($order_status_transition_from == 'processing' && $order_status_transition_to == 'completed')
    9.     ) {
    10.       return;
    11.     }
    12.     $order = wc_get_order($order_id);
    13.  
    14.     $activations = 0;
    15.     foreach ($order->get_items() as $item) {
    16.       if (in_array($item->get_product_id(), $this->activation_product_ids)) {
    17.         $activations += $item->get_quantity();
    18.       }
    19.     }
    20.  
    21.     if ($activations > 0) {
    22.       $user_id = $order->get_user_id();
    23.  
    24.       if ($user_id) {
    25.         $result = $wpdb->query("
    26.                    UPDATE `" . $table_prefix . "wc_customer_lookup`
    27.                    SET `media_recorder_activations` = `media_recorder_activations` + " . (int) $activations . "
    28.                    WHERE `user_id` = '" . $user_id . "'
    29.                ");
    30.       }
    31.     }
    32.   }