web-dev-qa-db-de.com

WooCommerce - Feste Menge eines Produkts

Ich versuche auf WooCommerce etwas zu erreichen, über das ich keine Informationen finden kann. Es ist wie im folgenden Szenario:

Ich verkaufe Schrauben und habe 1500 auf Lager. Ich möchte, dass der Kunde in einer Dropdown-Liste zwischen dem Kauf von 10, 30, 50 und 100 Schrauben wählt. Der Preis für jede Schraube ist niedriger, wenn Sie 100 im Vergleich zu 10, 30 usw. kaufen.

Dies funktioniert genau so, wie ich es möchte, indem ich Produktattribute und Produktvariationen verwende.ABERder Lagerbestand wird nicht wie gewünscht beeinflusst, da das System davon ausgeht, dass es sich um eine Packung mit 100 Schrauben handelt, und daher den Lagerbestand um 1 verringert.

Ich überlege, die class-wc-product-variation.php-Datei zu ändern, die den folgenden Code enthält:

function reduce_stock( $by=1 ) {
    global $woocommerce;
    if ( $this->variation_has_stock ) {
        if ( $this->managing_stock() ) {
            $this->stock        = $this->stock - $by;
            $this->total_stock  = $this->total_stock - $by;
            update_post_meta( $this->variation_id, '_stock', $this->stock );
            $woocommerce->clear_product_transients( $this->id ); // Clear transient
            // Check parents out of stock attribute
            if ( ! $this->is_in_stock() ) {
                // Check parent
                $parent_product = new WC_Product( $this->id );
                // Only continue if the parent has backorders off
                if ( ! $parent_product->backorders_allowed() && $parent_product->get_total_stock() <= 0 ) {
                    update_post_meta( $this->id, '_stock_status', 'outofstock' );
                }
            }
            return $this->stock;
        }
    } else {
        return parent::reduce_stock( $by );
    }
}

Ich versuche, $by auf den Namen der Produktvariante (10, 30, 50, 100) zu setzen, aber ich kann PHP nicht so gut. Ich habe versucht, einen relevanten Code zu sammeln (zumindest was ich denke) und ihn zu der folgenden Funktion zusammenzufügen:

function new_reduce_by () {
    //Get the name of the variation
    $this->variation_data[$name] = $attrvalue[0];
    //Extract only the numbers (some attributes may end with "grams" etc.)
    preg_match_all('!\d+!', $attrvalue[0], $modified_attrvalue);
    //Convert the array to a variable
    $custom_reduce_value = implode(' ', $modified_attrvalue[0]);
    //Return the name (value) of the variation
    return $custom_reduce_value;
}

Ich habe versucht, diese Funktion auf verschiedene Arten aufzurufen, aber ohne Erfolg denke ich, dass der obige Code nicht korrekt ist.

Sollte der obige Code funktionieren? Wenn ja, wie rufe ich die Funktion am besten auf? Ich weiß, dass Sie eine Funktion nicht aufrufen können, indem Sie $by=1 ändern. Sie müssen einen Wert oder eine Variable übergeben.

Oder soll ich das anders lösen?

Danke vielmals!

2
Nicklas

Vielleicht möchten Sie Ihren Ansatz hier noch einmal überdenken. Auf den ersten Blick scheint es mir, dass Sie dies erheblich vereinfachen könnten, aber einen Haken verwenden, nachdem die Bestellung verarbeitet wurde.

Wenn es sich bei all Ihren Variationen wirklich nur um Mengen handelt, ist es naheliegend, dass Sie nach Abschluss einer Bestellung die Mengen für das übergeordnete Element und jede der Variationen aktualisieren, sodass sie alle den gleichen Lagerbestand widerspiegeln.

Wenn Sie also die Bestellung bearbeiten, haben Sie die Eltern-ID und die Variations-IDs innerhalb des $ -Produkts und können einfach die Mengenwerte für jede innerhalb der Schleife aktualisieren.

Ich kenne den richtigen Haken nicht ganz, aber Sie finden die WooCommerce-Dokumente unter http://wcdocs.woothemes.com/apidocs/index.html und http: // wcdocs. woothemes.com/codex/extending/hooks/

1
Steve

Sie können dieses Plugin verwenden: http://wordpress.org/support/plugin/woocommerce-incremental-product-quantities

in Verbindung mit diesem Plugin: https://wordpress.org/plugins/woocommerce-bulk-discount/

Mit dem Advanced Product Quantities Plugin können Sie Mindestmengen erstellen und einen Schrittwert für inkrementelle Mengenerhöhungen definieren. Das Einzige, was Sie in Ihrer Situation tun, ist, dass Sie von 10, 30, 50, 100 gehen - dies folgt keiner Schrittwert-Erhöhungsregel. Wenn Sie also Ihre Mengen in Mengen von 10 oder 25 ändern können, reicht dieses Plugin aus.

Mit dem Plug-in für Mengenrabatte können Sie% -Rabattregeln global oder pro Produkt erstellen.

0
partyparty