it-swarm.com.de

Ändern Sie die Artikelpreise im Warenkorb in Woocommerce 3

Ich versuche, den Produktpreis im Warenkorb mithilfe der folgenden Funktion zu ändern:

    add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price' 
     );
      function add_custom_price( $cart_object ) {
         foreach ( $cart_object->cart_contents as $key => $value ) {
         $value['data']->price = 400;
        } 
     }

In WooCommerce Version 2.6.x funktionierte es einwandfrei, ab Version 3.0 funktionierte es jedoch nicht mehr 

Wie kann ich es in WooCommerce Version 3.0+ funktionieren lassen?

Vielen Dank.

8
Archana

Update _ ​​(September 2018)

Mit WooCommerce Version 3.0+ benötigen Sie:

Hier ist der Code:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);
function add_custom_price( $cart_obj ) {

    // This is necessary for WC 3.0+
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Avoiding hook repetition (when using price calculations for example)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart_obj->get_cart() as $cart_item ) {
        $cart_item['data']->set_price( 40 );
    }
 }

The Code wird in function.php -Datei Ihres aktiven untergeordneten Designs (oder Designs) oder auch in einer beliebigen Plugin-Datei gespeichert.

Dieser Code wurde getestet und funktioniert.

Hinweis: Sie können die Hook-Priorität von 20 auf 1000 _ ​​(oder sogar 2000) erhöhen, wenn Sie einige verwenden einige spezifische Plugins oder andere Anpassungen.

Verbunden:

27
LoicTheAztec

Mit WooCommerce Version 3.2.6 funktioniert die Antwort von @ LoicTheAztec für mich, wenn ich die Priorität auf 1000 erhöhe.

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);

Ich habe die Prioritätswerte 10, 99 Und 999 Ausprobiert, aber der Preis und die Gesamtsumme in meinem Warenkorb haben sich nicht geändert (obwohl ich mit get_price() bestätigen konnte, dass set_price() tatsächlich funktioniert hat) Stellen Sie den Preis des Artikels ein.

Ich habe einen benutzerdefinierten Hook, der meinem Einkaufswagen eine Gebühr hinzufügt, und ich verwende ein Plugin eines Drittanbieters, das Produktattribute hinzufügt. Ich vermute, dass diese WooCommerce "Add-Ons" Verzögerungen verursachen, bei denen ich meine benutzerdefinierte Aktion verzögern muss.

1
Tony