Woocommerce: precio personalizado basado en la entrada del usuario

No quería publicar aquí, pero no pude encontrar la respuesta que estaba buscando y no tengo suficiente reputación para comentar otras preguntas MUY SIMILARES para obtener mi respuesta exacta.

Encontré una respuesta casi perfecta de esta publicación:WooCommerce: ¿Agregar producto al carrito con aumento de precio?

usando el código:

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;
      }
 }

y funciona muy bien ... si establece un precio personalizado codificado.

Mi pregunta es: ¿Cómo puedo establecer un precio personalizado basado en la entrada del usuario?

He intentado todas las formas en que puedo pensar para pasar información (incluso intenté usar cookies, globales, sesiones) y ninguno de ellos funcionó como quería y todos fueron, en el MEJOR, hacks.

El producto específico en cuestión es una donación y el cliente desea que el usuario pueda establecer el precio de la donación (en lugar de simplemente crear un producto variable con puntos de precio establecidos).

En la página de donación, cuando el usuario envía el formulario de donación, agrego el producto de donación al carrito de la siguiente manera:

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

Mi producto de donación tiene un precio establecido de 0.00, por lo que cuando se agrega al carrito tiene un precio de 0.00 (no sé si el precio se establece en este punto o más adelante)

He intentado pasar información en este punto usando la última variable en el método add_to_cart que acepta una serie de argumentos, pero tampoco pude conseguir que funcione.

Estoy seguro de que la respuesta es simple, pero he estado tratando durante horas de hacer esto bien y no puedo hacer que funcione. Se me acabaron las ideas.

El código real que estoy usando en este momento es ligeramente diferente al sugerido por el que responde en la publicación anterior, pero funciona básicamente igual:

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);
        }
    }
}

Gracias de antemano por cualquier consejo útil!

Respuestas a la pregunta(3)

Su respuesta a la pregunta