Woocommerce: пользовательская цена на основе пользовательского ввода

Я не хотел публиковать здесь сообщения, но не смог найти ответ, который искал, и у меня недостаточно репутации, чтобы комментировать другие ОЧЕНЬ ПОХОЖИЕ вопросы, чтобы получить мой точный ответ.

Я нашел почти идеальный ответ из этого поста:WooCommerce: добавить товар в корзину с переопределением цены?

используя код:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price');

function add_custom_price( $cart_object ) {
      $custom_price = 10; // This will be your custome price  
      foreach ( $cart_object->cart_contents as $key => $value ) {
          $value['data']->price = $custom_price;
      }
 }

и это прекрасно работает ... если вы установили жестко запрограммированную цену.

Мой вопрос: как я могу установить пользовательскую цену, основанную на пользовательском вводе?

Я пытался всеми способами передавать информацию (я даже пытался использовать файлы cookie, глобальные переменные, сеансы), и ни один из них не работал так, как я хотел, и все они были, в лучшем случае, взломами.

Конкретный рассматриваемый продукт - это пожертвование, и клиент хочет, чтобы пользователь мог установить цену пожертвования (а не просто создать переменный продукт с заданными ценовыми точками).

На странице пожертвований, когда пользователь отправляет форму пожертвования, я добавляю продукт пожертвования в корзину следующим образом:

$donation_success = $woocommerce->cart->add_to_cart($donation_id); 

У моего пожертвованного продукта есть установленная цена 0,00, поэтому, когда он добавлен в корзину, он имеет цену 0,00 (я не знаю, установлена ​​ли цена на данный момент или позже)

В этот момент я попытался передать информацию, используя последнюю переменную в методе add_to_cart, которая принимает массив аргументов, но я не мог заставить это работать.

Я уверен, что ответ прост, но я часами пытался сделать это правильно, и я не могу заставить его работать. У меня нет идей.

Фактический код, который я использую в данный момент, немного отличается от того, который был предложен автором вышеуказанного поста, но работает в основном так же:

add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation');

function woo_add_donation() {
    global $woocommerce;

    $donation = 10;
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if($cart_item['data']->id == 358 || $cart_item['data']->id == 360){
            $cart_item['data']->set_price($donation);
        }
    }
}

Заранее спасибо за любой полезный совет!