Woocommerce: Artikel im Warenkorb programmgesteuert aktualisieren

Lesezeit: 4 Minuten

Woocommerce Artikel im Warenkorb programmgesteuert aktualisieren
matticus_1120

Ich muss den Preis eines Artikels im Einkaufswagen programmgesteuert und dynamisch ändern.

Ich habe verschiedene Kombinationen von Woocommerce-Action-Hooks, den Warenkorb- und Sitzungsobjekten ausprobiert, aber nichts scheint den Zweck zu erfüllen. Ich dachte, das wäre nicht so herausfordernd.

add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price' );

function change_cart_item_price( $cart_object ) {

    foreach ( $cart_object->cart_contents as $key => $value ) {

        if( 123 == $value['data']->id ) {

            $new_price = function_to_get_new_price( $value, get_current_user_id( ) );
            $value['data']->price = $new_price;
        }
   }
}

Der obige Code ändert den Preis für jeden Artikel nur auf der Checkout-Seite oder beim Aktualisieren des Warenkorbs (dh: Der Haken wird aufgerufen, wenn ein Artikel aus dem Warenkorb entfernt wird), aber nicht unbegrenzt.

Ich verwende das Add-on Woocommerce Gravity Forms. Ich habe insbesondere ein Produkt, das von einem bestimmten Benutzer mehrmals bestellt wird. Der Benutzer darf 5x kostenlos mit nur Versandgebühren und jede über 5 kostet 20 $. Ich habe so viel mit Gravity Forms-Hooks codiert und funktionsfähig, die Felder dynamisch füllen. Der Versand ist spezifisch für Felder innerhalb des Gravitationsformulars, daher überlasse ich diese Berechnung Gravity Forms.

Mein Problem ist, dass, wenn ein Benutzer die Menge dieses Produkts aus seiner Bestellung reduziert (einen der Artikel aus dem Warenkorb entfernt), der Preis für jeden Artikel desselben Produkts im Warenkorb neu berechnet werden sollte, andernfalls könnten sie vorbei sein -berechnet (Ein Artikel, der früher der 6. war, ist jetzt der 4., aber der Preis bleibt gleich, was er nicht sollte)

Deswegen, ich möchte den Preis jedes Artikels im Warenkorb basierend auf der Menge dieses bestimmten Produkts jedes Mal neu berechnen, wenn etwas aus dem Warenkorb entfernt wird.

— BEARBEITEN —

Der obige Code funktioniert, aber mir ist klar, dass das Problem eine benutzerdefinierte Schleife sein muss, die ich verwende, um die Preise anzuzeigen …

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $_product = $cart_item['data'];
    if( 123 == $_product->post->ID ) {
        $price_not_updated = $cart_item['data']->price;
    }
}

  • Wo ist dein Code, der nicht funktioniert? Es ist am besten, wenn wir es uns ansehen könnten, um zu sehen, was Sie tun, und Ihnen zu helfen.

    – Giacomo1968

    10. Juni 14 um 2:44 Uhr

  • Danke Jake. Ich habe mit Code und einer detaillierteren Beschreibung meines Problems aktualisiert. Ich glaube, ich suche wirklich nur nach dem richtigen Woocommerce-API-Objekt oder Hook.

    – matticus_1120

    10. Juni 14 um 3:44 Uhr

  • Hast du dir das angeschaut? docs.woothemes.com/document/woocommerce-dynamic-pricing

    – Giacomo1968

    10. Juni 14 um 3:59 Uhr

Ich habe es herausgefunden … Ich habe mir die Woocommerce-Warenkorbdokumente angesehen und im Wesentlichen festgestellt, dass die Preise, die ich erhalten habe, noch berechnet werden mussten. Also musste ich vor dem Ausführen der Schleife die Aktion ausführen, in die ich mich ursprünglich eingehängt hatte, um die Preise zu ändern.

Danke für Ihre Hilfe!

function getUpdatedCartPrices() {

    do_action( 'woocommerce_before_calculate_totals', WC()->cart );

    $horray_updated_prices_works = array();

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $_product = $cart_item['data'];
        if( 123 == $_product->post->ID ) {

            $horray_updated_prices_works[] = $cart_item['data']->price;

        }
    }

}

Woocommerce Artikel im Warenkorb programmgesteuert aktualisieren
jfh6

Ich habe die Funktion so geändert, dass sie einen zweiten Parameter hat, sodass Sie sie dynamisch mit jedem Produkt verwenden können, solange Sie die richtige ID aufrufen. Außerdem setze ich den Rückgabewert der Funktion entweder auf eine Erfolgs- oder eine Fehlermeldung. Auf diese Weise können Sie feststellen, ob es geändert wurde, und wenn ja, zu welchem ​​​​Preis. Hoffe das hilft. Übrigens, wenn diese Funktion erneut aufgerufen wird, wenn der Warenkorb aktualisiert wird, sollte das Problem mit der Neuberechnung gelöst werden. Es wäre großartig, wenn ich den Code für Ihre Funktion $function_to_get_new_price() sehen könnte.

add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price' );

function change_cart_item_price($id, $cart_object ) {

    foreach ( $cart_object->cart_contents as $key => $value ) {

        if( $id == $value['data']->id ) {

            $new_price = function_to_get_new_price( $value, get_current_user_id( ) );
            $value['data']->price = $new_price;

            $successMsg = "The price of item $value['data']->id was set to $value['data']->price".;
           return $successMsg;

        }else{
           $errorMsg = "Price was not changed!";
           return $errorMsg;
        }
   }
}

  • Hmm… Hier ändert sich nichts.

    – matticus_1120

    11. Juni 14 um 20:00 Uhr

.

620990cookie-checkWoocommerce: Artikel im Warenkorb programmgesteuert aktualisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy