it-swarm.com.de

Filter oder Hook für "woocommerce_add_to_cart" hinzufügen

enter image description here

Ich möchte zwei Produkte gleichzeitig in den Warenkorb legen, eines ist das ursprüngliche (aktuelle) Produkt und das zweite ist aus der Dropdown-Liste

add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
$cnt=2
function custome_add_to_cart() {
    global $woocommerce;
      $cnt = $cnt + 1;
      echo $cnt."X";
      echo $p_id=$_POST['assessories'];
    $woocommerce->cart->add_to_cart($p_id, 1);

}

Ausgabe: - Wie Sie im Ausgabebild unten sehen können, wird das gleiche Dropdown-Element oft im Warenkorb hinzugefügt, aber ich möchte nur 1 Menge in den Warenkorb legen. Es scheint, dass die Funktion add_to_cart viele Male ausgeführt wird. Was muss ich tun oder wie füge ich einen Filter hinzu, wenn das zweite Drop-Down-Produkt als Parameter in den Warenkorb gelegt wird? so kann ich dieses produkt auch im warenkorb hinzufügen.

enter image description here

5
luckyamit

Das sollte funktionieren: 

add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
function custome_add_to_cart() {
    global $woocommerce;

    $product_id = $_POST['assessories'];

    $found = false;

    //check if product already in cart
    if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
        foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
            $_product = $values['data'];
            if ( $_product->id == $product_id )
                $found = true;
        }
        // if product not found, add it
        if ( ! $found )
            WC()->cart->add_to_cart( $product_id );
    } else {
        // if no products in cart, add it
        WC()->cart->add_to_cart( $product_id );
    }
}

Basierend auf folgender Quelle: https://docs.woothemes.com/document/automatically-add-product-to-cart-on-visit/

8
alev

Die Woocommerce-Funktionen "add_to_cart" führen den Haken "woocommerce_add_to_cart" aus. In Ihrem Code wird also "add_to_cart" ausgeführt, der "woocommerce_add_to_cart" ausführt, der Ihren Code ausführt, der "add_to_cart" usw. ausführt. Sie haben eine rekursive Schleife erstellt.

Sie müssen einen alternativen Weg finden oder aufhören, $woocommerce->cart->add_to_cart($p_id, 1); in Ihrem eigenen Code aufzurufen.

7

Was Sie vielleicht suchen, ist ein variables Produkt mit einigen Attributen!

Wenn Sie das wirklich wollen, brauchen Sie nur die Funktion remove_action:

add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
function custome_add_to_cart() {
    $p_id=$_POST['assessories'];
    remove_action('woocommerce_add_to_cart', __FUNCTION__);
    WC()->cart->add_to_cart( $p_id );
}

Dies verhindert, dass die Aktion auf unbestimmte Zeit wiederholt wird, und ist ziemlich einfach. Sie wird also nur einmal für dieses Produkt hinzugefügt. Möglicherweise möchten Sie die im Warenkorb hinzugefügte Menge abrufen und sie der WC()->cart->add_to_cart-Funktion als zweiten Parameter zuweisen, sodass beide dieselbe Menge haben

Das __FUNCTION__ ist ein magisches PHP - Tag, das nur den Namen der aktuellen Funktion als String angibt. Wenn der Funktionsname nicht derselbe ist, funktioniert er trotzdem

0
Tofandel