按属性值减少WooCommerce项目库存



我有一个Woocommerce"可变产品"的设置,其中唯一的变化是"大小"属性:15克,100克,250克。我想做的是使用该变化量传递给 Woo wc 库存函数,这样当购买产品变体"15 克"时,总库存会下降 15,而不是 1。

在 Woo 内部,有文件 wc-stock-functions (http://hookr.io/plugins/woocommerce/3.0.6/files/includes-wc-stock-functions/) - 这甚至给出了一个过滤器,woocommerce_order_item_quantity。我想使用它来将库存编号乘以 # 克,并以这种方式将库存减少克。

我正在尝试这个:

// define the woocommerce_order_item_quantity callback 
function filter_woocommerce_order_item_quantity( $item_get_quantity, $order, 
$item ) { 
$original_quantity = $item_get_quantity; 
$item_quantity_grams = $item->get_attribute('pa_size');
// attribute value is "15 grams" - so remove all but the numerals
$item_quantity_grams = preg_replace('/[^0-9.]+/', '', $item_quantity_grams);
// multiply for new quantity
$item_get_quantity = ($item_quantity_grams * $original_quantity);
return $item_get_quantity; 
}; 
// add the filter 
add_filter( 'woocommerce_order_item_quantity', 
'filter_woocommerce_order_item_quantity', 10, 3 ); 

但是现在收到内部服务器错误作为响应。

有没有人知道我对上述代码做错了什么?感谢您的任何帮助。

第一个错误是在$item->get_attribute('pa_size');中,因为$itemWC_Order_Item_Product对象的实例get_attribute()并且WC_Order_Item_Product类不存在该方法。

相反,您需要使用WC_Order_Item_Product类中的get_product()方法获取WC_Product对象的实例...

所以你的代码应该是:

add_filter( 'woocommerce_order_item_quantity', 'filter_order_item_quantity', 10, 3 ); 
function filter_order_item_quantity( $quantity, $order, $item )  
{
$product   = $item->get_product();
$term_name = $product->get_attribute('pa_size');
// The 'pa_size' attribute value is "15 grams" And we keep only the numbers
$quantity_grams = preg_replace('/[^0-9.]+/', '', $term_name);
// Calculated new quantity
if( is_numeric ( $quantity_grams ) && $quantity_grams != 0 )
$quantity *= $quantity_grams;
return $quantity;
}

代码进入函数.php活动子主题(或活动主题)的文件。经过测试并工作。

注意:此挂钩函数将根据新返回的增加数量值减少库存数量(在本例中为实际数量乘以 15)

相关内容

  • 没有找到相关文章

最新更新