按属性值减少 WooCommerce 项目库存
Reduce WooCommerce Item Inventory By Attribute Value
我有一个 Woocommerce "Variable Products" 设置,其中唯一的变化是 'size' 属性:15 克、100 克、250 克。我想要做的是使用该变化量传递给 Woo wc-stock-functions,这样当购买产品变化“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');
中,因为 $item
是 WC_Order_Item_Product
对象的一个实例,并且 WC_Order_Item_Product
[=29] 不存在 get_attribute()
方法=].
相反,您需要使用 get_product()
方法从 WC_Order_Item_Product
Class…
获取 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;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
Note: This hooked function is going to reduce the stock quantity based on that new returned increased quantity value (in this case the real quantity multiplied by 15)
我有一个 Woocommerce "Variable Products" 设置,其中唯一的变化是 'size' 属性:15 克、100 克、250 克。我想要做的是使用该变化量传递给 Woo wc-stock-functions,这样当购买产品变化“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');
中,因为 $item
是 WC_Order_Item_Product
对象的一个实例,并且 WC_Order_Item_Product
[=29] 不存在 get_attribute()
方法=].
相反,您需要使用 get_product()
方法从 WC_Order_Item_Product
Class…
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;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
Note: This hooked function is going to reduce the stock quantity based on that new returned increased quantity value (in this case the real quantity multiplied by 15)