我正试图在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
, 您必须传递一个值或变量。
或者我应该用其他方法解决这个问题?
非常感谢!