Woocommerce: Benutzerdefinierter Preis basierend auf Benutzereingaben

Ich wollte hier nichts posten, konnte aber die gesuchte Antwort nicht finden, und ich habe nicht den Ruf, andere SEHR ÄHNLICHE Fragen zu kommentieren, um meine genaue Antwort zu erhalten.

Ich habe in diesem Beitrag eine fast perfekte Antwort gefunden:WooCommerce: Produkt mit Preisüberschreibung in den Warenkorb legen?

mit dem Code:

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

und es funktioniert großartig ... wenn Sie einen fest codierten benutzerdefinierten Preis festlegen.

Meine Frage lautet: Wie kann ich einen benutzerdefinierten Preis basierend auf Benutzereingaben festlegen?

Ich habe alles versucht, um Informationen weiterzugeben (ich habe sogar versucht, Cookies, Globals und Sessions zu verwenden), und keiner von ihnen funktionierte so, wie ich es wollte, und alle waren bei BEST Hacks.

Das betreffende Produkt ist eine Spende, und der Kunde möchte, dass der Benutzer den Spendenpreis festlegen kann (anstatt nur ein variables Produkt mit festgelegten Preispunkten zu erstellen).

Wenn der Benutzer auf der Spendenseite das Spendenformular absendet, füge ich das Spendenprodukt wie folgt zum Warenkorb hinzu:

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

Mein Spendenprodukt hat einen festgelegten Preis von 0,00. Wenn es in den Warenkorb gelegt wird, hat es einen festgelegten Preis von 0,00. (Ich weiß nicht, ob der Preis zu diesem Zeitpunkt oder später festgelegt wurde.)

Ich habe versucht, Informationen an dieser Stelle mit der letzten Variablen in der Methode add_to_cart weiterzugeben, die eine Reihe von Argumenten akzeptiert, aber ich konnte auch nicht scheinen, dass das funktioniert.

Ich bin sicher, die Antwort ist einfach, aber ich habe stundenlang versucht, dies richtig zu machen, und ich kann es nicht zum Laufen bringen. Ich habe keine Ideen mehr.

Der tatsächliche Code, den ich gerade verwende, unterscheidet sich geringfügig von dem, den der Antwortende des obigen Beitrags vorgeschlagen hat, funktioniert jedoch im Grunde genommen genauso:

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

Vielen Dank im Voraus für jeden hilfreichen Rat!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage