WooCommerce-产品的固定数量

时间:2012-11-15 作者:Nicklas

我正试图在WooCommerce上完成一件我找不到任何信息的事情。类似于以下场景:

我卖螺丝,有1500个存货。我希望客户在下拉列表中选择购买10、30、50和100个螺钉。当你买100个螺钉时,每个螺钉的价格比买10个、30个等螺钉的价格低。

通过使用产品属性和产品变体,这正是我想要的方式。BUT 库存没有按我想要的方式进行,因为系统认为它是一个100个螺钉的包,因此库存减少了1。

我正在考虑修改class-wc-product-variation.php 包含以下代码的文件:

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 );
    }
}
我正在试着设置$by 以产品变体的名义(10、30、50、100),但我并不擅长PHP。我尝试收集一些相关代码(至少是我认为的),并将其组合到以下函数中:

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;
}
我尝试过用不同的方式调用这个函数,但没有成功,我想上面的代码是不正确的。

上述代码是否有效?如果是,如何以最佳方式调用该函数?我知道你不能通过改变$by=1, 您必须传递一个值或变量。

或者我应该用其他方法解决这个问题?

非常感谢!

3 个回复
SO网友:Steve

您可能想重新考虑一下您的方法,乍一看,您可以大大简化此过程,但在处理订单后使用挂钩。

如果您的所有变体实际上都是数量,那么当订单完成时,您应该更新父项和每个变体的数量,以便它们都反映相同的库存计数,这是理所当然的。

因此,在处理订单时,您在$product中有父ID和变体ID,您可以简单地更新循环中每个产品的数量值。

我不知道该怎么做,但你可以在http://wcdocs.woothemes.com/apidocs/index.htmlhttp://wcdocs.woothemes.com/codex/extending/hooks/

SO网友:partyparty

您可以使用此插件:http://wordpress.org/support/plugin/woocommerce-incremental-product-quantities

结合此插件:https://wordpress.org/plugins/woocommerce-bulk-discount/

高级产品数量插件将允许您创建最小数量,以及定义增量数量增加的步长值。唯一的问题是,在你的情况下,你从10,30,50,100开始-这不符合阶跃值增加规则。因此,如果您可以将数量集修改为10或25的数量集,那么这个插件就可以做到这一点。

批量折扣插件将允许您创建全球或每种产品的%折扣规则。

SO网友:IgniteWoo Team

看看WooCommerce的动态定价附加组件-它可能可以满足您的需要。

结束